两点不太懂!
函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序;
递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;
这两句话是什么意思啊?能帮忙解释一下吗?
函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序;
递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;
这两句话是什么意思啊?能帮忙解释一下吗?
2016-06-01
我先把 getPeachNumbe 简写成 gN。这个n是天数的意思。
首先 它给了我们 int num = getPeachNumber(1);
gN(1);中n=1代入 (getPeachNumber(n+1)+1)*2;
就会有 (gN(1+1)+1)*2 这时gN(1+1)=gN(2)对吧?可是gN(2)等于多少我们又不知道,所以重新代入 (getPeachNumber(n+1)+1)*2; 就会出现 (gN(2+1)+1)*2 ,这时又出现了 gN(3) 我们还是不知道,就继续.....(以此类推) 到后面就有当 n==10时 return=1 就是说gN(10)=1 。这时g(10)等于多少我们知道,就代入gN(9)的式子里面得出桃子数,然后算上去。因为最先得出第九天的桃子所以程序先输出。
n=1时 (gN(1+1)+1)*2 ——》里面gN(2)的值不知道
n=2 (gN(2+1)+1)*2 ——》gN(3)的值不知道
n=3 (gN(3+1)+1)*2 ——》gN(4)不知道
n=4 (gN(4+1)+1)*2 ——》gN(5)不知道
n=5 (gN(5+1)+1)*2 ——》gN(6)不知道 <—————— 这些是 位于递归调用前的语句和各级被 调用函数具有 相同 的执行顺序
n=6(gN(6+1)+1)*2 ——》gN(7)不知道
n=7(gN(7+1)+1)*2 ——》gN(8)不知道
n=8 (gN(8+1)+1)*2 ——》gN(9)不知道
n=9(gN(9+1)+1)*2 ——》gN(10) 知道
n==10 则 return 1;所以gN(10)=1.
现在开始往回带,因为gN(10)=1代入gN(9)能登出gN(9)等于多少,接着就gN(8) 推上去.....
n=9 (gN(9+1)+1)*2 ——》gN(9) = (1+1)*2=4
n=8 (gN(8+1)+1)*2 ——》gN(8) = (4+1)*2=10 <—— 这些 递归函数中,位于递归调用后的语句的执 行顺序和各个被调用函数的 顺序相反
。。。。推下出。
希望能帮到你 :)
举报