2016-11-10 55 views
1

我想学习递归在Pascal和我有这样的代码反转递归的字符串:帕斯卡尔:反转字符串递归

Function Invert (ch:string) : string; 

    begin 
    if ch='' then 
    Invert:='' 
    else 

    Invert:=copy(ch,length(ch),1)+Invert(copy(ch,1,length(ch)-1)); 
    end; 

谁能给我解释一下这是怎么回事就在这里一步步。 谢谢。

+0

我希望这是一个练习,因为对字符串使用递归是一个非常糟糕的主意。有限的堆栈大小意味着,对于更长的字符串它将失败。 'copy','+'将需要大量的堆分配。最后但并非最不重要的一点是,更新freepascal函数调用中字符串的引用计数效率非常低。 – BeniBela

回答

3

如果字符串为空,它的反转就是空字符串;否则,反转是(字符串减去其最后一个字符)反转后的最后一个字符。

幸运的是,您有一个可以反转字符串的函数:Invert

+0

这是反转部分,我不明白,我们如何反演递归 – Ashref

+1

@Ashref - 裁剪最后一个字符并放在一边。重新做到剩下的部分。重新做到剩下的部分。重新做到剩下的部分。 –

+0

@SertacAkyuz当我们停下来? – Ashref