0

私は再帰的メソッドについて少し学ぼうとしていて、ツリー内のすべての整数の合計をカウントするバイナリツリーのメソッドを書いています。コードは正常に機能しますが、アプリケーションがいつ停止するかを知る方法についてはまだ少し混乱しています。私のコードは次のようになります。

    public int sum(){

    return sum(overallRoot);
}

private int sum(IntTreeNode root) {
    if (root == null) {
        return 0;
    }else {
        return root.data + sum(root.left) + sum(root.right);
    }

}

(上記のコードは私のnodeTreeクラスからのものです)

次のコードは私のメインクラスからのものです:

public class TreeClient {

/**
 * @param args
 */
public static void main(String[] args) {
    IntTree tree = new IntTree(12);
    System.out.println(tree.sum());
}

}

したがって、問題は(おそらく多くの場合非常に単純ですが)、アプリケーションはいつ停止するかをどのように知るのでしょうか?iveは単純なシステムアウトプリントを使って理解しようとしましたが、私の理解では、メソッドはそれを無限ループで自己と呼びますか?

誰かが応答する時間があることを願っています!

4

3 に答える 3

3

どの再帰プログラムでも、abase conditionに達すると反復が停止します。ここで、基本条件は次のとおりです。

if (root == null) {
    return 0;
}

したがって、elseブロックの次のステートメントでyourroot.leftと、が両方ともnullになると、あなたはyourに到達したため、ループが停止します。root.rightreturnbase condition

return root.data + sum(root.left) + sum(root.right);
于 2012-09-30T18:59:44.580 に答える
1

とてもシンプルです

合計関数から次の行を取得します。

return root.data + sum(root.left) + sum(root.right);

ツリーの一番下に到達すると、root.leftはnullになり、 root.rightもnullになります。したがって、上記の行がsum(root.left)を呼び出すと、sum関数はifステートメントの残りの半分にドロップします。

return 0;

したがって、sum関数はそれ自体を呼び出さなくなり、再帰を停止します

于 2012-09-30T18:59:54.837 に答える
1

答えは、それ自体が再帰的に呼び出されなくなるという条件があるため、無限ループに入らないということです。

条件は

if (root == null)

それがするとき

return 0;

もう一度自分自身を呼び出すのではなく

return root.data + sum(root.left) + sum(root.right);
于 2012-09-30T19:03:14.030 に答える