私は再帰について読んだことがあると私は非常に私は階乗で使用している非常に基本的な事を理解するのに興味があります。私はよくそれについて研究しているので、それの特定の動画を見て、何とかこの事は非常に私を混乱させています。私は、コードアップマグカップを書くのオプションを持っていると前方に移動するが、私はよく物事を学ぶによ。
ここから再帰のための情報源は以下のとおりです。
私はコードで、私はある一つのことを見てきましたので、聞いて一つのことを持っていますif-else
。私は、if else条件について非常によく知っています。しかし、ここでは、物事は少し複雑です。
public static int fact(int n){
if(n <=1)
return 1;
else
return n * fact(n-1);
}
上記のコードでは、ここでの結果は、私はそれがときに条件を満たすのみ1を返し、そしてどのようにそれが正しい結果を印刷して来ていない理由だと思うものを何とか正しいように見えますが。私は把握できていないよ、単一の漁獲があります。私はこれを介して取得するのに役立ちます。
コーディング分野における学習者として私を考えてみましょう。感謝
ツリーとして再帰関数を表示すると、それははるかに簡単に初心者のために理解することができます。すべての再帰関数は、2つのステップで動作します。
ステップ1:ツリーの展開
ステップ2:バック置換
下の画像を考えてみましょう。画像では、色の赤ショーは1ステップと、色の緑のショーは、あなたがステップ1が終了するまで、ステップ2を行うことができない2ステップ。これが理由で、あなたがそうでなければ、すべての再帰関数に終了条件を持っている必要があります。ツリーは、メモリ不足になり、あなたのプログラムを拡大し続けます。
あなたが呼び出されたときfact(4)
、それはのように展開4 * fact(3)
以下に示すように、さらに拡大しています:
fact(4) = 4 * fact(3)
fact(3) = 3 * fact(2)
fact(2) = 2 * fact(1)
fact(1) = 1
さて、あなたがする必要があるすべての値を取得するために値をバックに置き換えていますfact(4)
。
ハードウェアでは、再帰関数は、ちょうど上に示した木のように展開します。これは、スタックに発生し、ツリーの各ノードは、活性化レコードです。この回答を参照してください起動レコードについての詳細を知っています。