a的值是6.答案是12.它是如何完成的?
if (a==0)
return 1;
return (a*a)/addxy(a-1)
这个,a的值是20.怎么产生11?它必须是一个否定的答案,因为它变得像20-19-18-17 -...等等
if (a==0)
return 1;
return a-addxy(a-1);
我不明白它是如何完成的。 PS:我一直在java中读取递归,就像一千次。仍然没有得到它。有人,请帮忙。
答案 0 :(得分:1)
假设这是你的addxy方法
int addxy(a){
if (a==0)
return 1;
return (a*a)/addxy(a-1)
}
你正在递归,事实证明这就是计算结果。
(6 * 6)/((5 * 5)/((4 * 4)/((3×3)/((2 * 2)/((1 * 1)/(1)))) ))
好的,现在告诉你为什么会这样。这是在您调用它时创建的堆栈:
a=6: (6*6)/(a=5)
a=5: (5*5)/(a=4)
a=4: (4*4)/(a=3)
a=3: (3*3)/(a=2)
a=2: (2*2)/(a=1)
a=1: (1*1)/(a=0)
a=0: 1
这就是当它碰到基础案例时堆栈的样子,现在从堆栈弹出直到你完成。
a=6: (6*6)/(a=5)
a=5: (5*5)/(a=4)
a=4: (4*4)/(a=3)
a=3: (3*3)/(a=2)
a=2: (2*2)/(a=1)
a=1: (1*1)/1
a=6: (6*6)/(a=5)
a=5: (5*5)/(a=4)
a=4: (4*4)/(a=3)
a=3: (3*3)/(a=2)
a=2: (2*2)/1
a=6: (6*6)/(a=5)
a=5: (5*5)/(a=4)
a=4: (4*4)/(a=3)
a=3: (3*3)/4 // This is (9)/4, so integer division will happen
a=6: (6*6)/(a=5)
a=5: (5*5)/(a=4)
a=4: (4*4)/2 // Note the integer division that happened to get 2
a=6: (6*6)/(a=5)
a=5: (5*5)/8
a=6: (6*6)/3
a=6: 12
答案 1 :(得分:0)
所以这是你的addxy方法
int addxy(a){
if (a==0)
return 1;
return (a*a)/addxy(a-1)
}
输入:addxy(3);
<强>输出强>
addxy(3) : will return (3*3)/addxy(2);
addxy(2) : will return (2*2)/addxy(1);
addxy(1) : will return (1*1)/addxy(0);
addxy(0) : will return (1);
现在回溯:
(1*1)/1=1 <-------Since addxy(0) is 1
(2*2)/1=4 <------- Since return (1*1)/addxy(0); is 1
(3*3)/4=2 <--------- Since Integer Division so no decimal .
最终结果: 2