ロギングを試してください。または、よく、ちょうどデバッグ印刷は:
public static int h(int n){
System.out.println("called h(" + n + ")");
if (n == 0) {
System.out.println("we know the result for 0, returning 0");
return 0;
} else {
System.out.println("we don't know the result, calling for " + (n-1));
int t = h(n-1);
System.out.println("Found the result for " + (n-1) +
", calculating the result for " + n);
return t + 1;
}
}
n = 4
ために、あなたが得られます。
called h(4)
we don't know the result, calling for 3
called h(3)
we don't know the result, calling for 2
called h(2)
we don't know the result, calling for 1
called h(1)
we don't know the result, calling for 0
called h(0)
we know the result for 0, returning 0
Found the result for 0, calculating the result for 1
Found the result for 1, calculating the result for 2
Found the result for 2, calculating the result for 3
Found the result for 3, calculating the result for 4
は、それはあなたの手掛かりを与えるでしょうホープ - 何が起こるか見て、異なるアルゴリズムと遊びます。
さらに、h(-1)
に電話してみてください。楽しんでください!
出典
2011-12-17 14:34:35
alf
あなたは 'トレース' によって何を意味するのに役立ちます希望?もしあなたがSystem.out.println( "h(" + n + ")"); before(n == 0)の前に、h(5)の出力として何を期待しますか? – milan
あなたが言うように、単純な再帰的な方法です。あなたの混乱の原因は何ですか?具体的に言及する。 – Lion
正確に何をトレースしようとしていますか?これは、再帰関数の3つの条件すべてを満たす。 – tarheel