私は再帰の概念を理解しようとしています。私は、バイナリツリーの深さを計算するために、このようなコードがどのように機能するかを理解しないメモリスタックは、バックツーバック再帰呼び出しをどのように探しますか?
(例階乗)コード内の1つの再帰的な文がある場合、それがどのように機能するかを理解する:
public int getDepth(Node root)
{
if (root == null) return 0;
int left = getDepth(root.left);
int right = getDepth(root.right);
if (left > right)
return left + 1;
else
return right + 1;
}
私はなぜ見ますこれは動作しますが、方法は動作しません。誰かが私に2番目の再帰呼び出し(getDepth(root.right))の仕組みを説明することはできますか?このコードはメモリ内でどのように見えますか? getDepth(root.left)が呼び出されると再帰的に呼び出されると、スタックはすべての底のif文に移動しますか?
はい、getDepthとそれ以降のすべての再帰呼び出しが終了すると、元に戻ります。 –
再帰呼び出しでさえ、ある時点(この場合は 'root == null')で終了するので、再帰呼び出しは実行されます。 – tkausl
StackOverflowやその他のRuntimeExceptionsが発生している場合を除いては、確かです。 –