嘿,这个递归功能需要帮助,这将是g(2)
,g(0)
和g(-5)
的结果。
public static int g(int v) {
if (v>5) {
return 0;
}
if (v<=0) {
return Math.abs(v)+g(v+2);
}
return (v-1)+g(v+1);
我掌握了递归的一般要点,并且我知道g(2)
会产生10
,但我很幸运,因为该数字从未使用过第一个return语句。我不确定g(0)
和g(-5)
的工作方式……因为该第一条return语句被调用。有人可以解释一下吗?
答案 0 :(得分:1)
您可以通过在一张纸上写下表达式并不断扩展并查看您得到的内容来轻松地做到这一点。
对于XSLT
,运行第二个if语句:
g(0)
对于|0| + g(2)
,我们已经知道它是10,所以g(2)
也是10。
对于g(0)
,运行第二个if语句:
g(-5)
然后第二个if语句再次运行:
|-5| + g(-3)
再次:
5 + |-3| + g(-1)
现在,运行最后一个return语句:
8 + |-1| + g(1)
9 + (1 - 1) + g(2)
已知为10,所以
g(2)
答案 1 :(得分:0)
Math.abs(0)+ g(0 + 2)= 10)
数学(-3)+ g(-1)= 14
数学(-1)+ g(1)= 11
g(-5)返回19(如果执行的语句返回19,则秒
Math.abs(-5)+ g(-3))= 19