2016-11-10 84 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