嗯,这是我从这次练习考试中得到的另一个问题,即我不知道该怎么做。
int fun5 (int c, int d) {
if (c <= d) {
return c;
} else {
return fun5(c-d, d) * c;
}
}
当你运行值为fun5(9,3)的代码时,你应该得到162,但我不知道如何到达那里。显然第一个if语句是假的,所以你去了else,但是你必须回到带有这些新值的fun5,但是if语句再次失败,所以你再次去了else,但你刚来自那里。我现在只是一个非常困惑的人。
答案 0 :(得分:4)
让我们追溯一下,看看会发生什么!
调用fun5(9, 3)
将返回
fun5(9, 3)
= fun5(9 - 3, 3) * 3
= fun5(6, 3) * 9
好吧,我们有那个
fun5(6, 3)
= fun5(3, 3) * 6
然后
fun5(3, 3) = 3
所以这意味着
fun5(6, 3)
= fun5(3, 3) * 6
= 3 * 6
= 18
所以这意味着
fun5(9, 3)
= fun5(6, 3) * 9
= 18 * 9
= 162
您的答案来自哪里。
希望这有帮助!
答案 1 :(得分:2)
这是递归
第一次c = 9而d = 3所以你做了else语句:(下面用数字代替)
return fun5(9-3, 3) * 9;
然后你用c = 6和d = 3做下一步,所以你再做一次
return fun5(6-3, 3) * 6;
然后你用c = 3和d = 3做下一个,所以你做了if
return 3;
跟进你得到的堆栈
return 3;
return 3 * 6;
return 18 * 9;
最终回报是18 * 9或162。