public static int wacky (int x , int y){
if(x <= 1){
return y;
}
else{
return wacky(x - 1, y - 1) + y;
}
}
我进行了一段时间的测试,但我仍然不知道如何逐步进行递归,我记得这个问题是通过记忆我觉得测试认为你可能会这样计算...... public static = 4 + 6 + 1 + 4 + 4 - 1 + 6 - 1 + 6 但不是我的答案选择我意识到我做错了什么...... 我的老师不帮助我,甚至不关心我试图寻求帮助,但他不知道如何解释这个......
答案 0 :(得分:0)
当您递归调用函数时,它们会将新函数添加到堆栈中,直到得到最终结果(return
)。当它发生时,你返回堆栈返回返回。
执行示例:
第一轮wacky(4, 6)
:
4 <= 1
?不,所以请致电wacky(4 - 1, 6 - 1)
第二轮wacky(3, 5)
:
3 <= 1
?不,所以请致电wacky(3 - 1, 5 - 1)
第三轮wacky(2, 4)
:
2 <= 1
?不,所以请致电wacky(2 - 1, 4 - 1)
第四轮wacky(1, 3)
:
1 <= 1
?是return 3 + 4
; return 3 + 4 + 5
; return 3 + 4 + 5 + 6
; 答案 1 :(得分:0)
为什么不让Java告诉你发生了什么?插入一些print
语句,以便在代码运行时查看值:
private static int indent = 1;
public static int wacky(int x , int y) {
System.out.printf("%" + (indent++ * 2) + "swacky(%d, %d)%n", "", x, y);
int result;
if (x <= 1)
result = y;
else
result = wacky(x - 1, y - 1) + y;
System.out.printf("%" + (indent-- * 2) + "s-> %d%n", "", result);
return result;
}
测试
wacky(4, 6);
输出
wacky(4, 6)
wacky(3, 5)
wacky(2, 4)
wacky(1, 3)
-> 3
-> 7
-> 12
-> 18