2016-11-10 1 views
1

私はパスカルで再帰を学ぶしようとしている、と私は再帰の文字列を反転するには、このコードを持っていると、文字列を反転:パスカル:再帰

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'、' + 'は膨大な量のヒープ割り当てが必要です。最後に、フリーパスカル関数呼び出しで文字列の参照カウントを更新するのは非常に非効率的です。 – BeniBela

答えて

3

文字列が空の場合、その反転は空の文字列にすぎません。それ以外の場合、反転は最後の文字の後に反転(文字列から最後の文字を引いたもの)です。

幸いなことに、文字列を反転できる関数があります:Invert

+0

私が理解していない逆転部分ですが、どのように再帰で逆転するのですか? – Ashref

+1

@Ashref - 最後の文字を切り捨てて入れておきます。残りの部分にもう一度やり直してください。残りの部分にもう一度やり直してください。残りの部分にもう一度やり直してください。 –

+0

@SertacAkyuzそして私たちがやめるとき? – Ashref