为了账号安全,请及时绑定邮箱和手机立即绑定

两点不太懂!


函数中,位于递归调用前的语句和各级被调用函数具有相同的执行顺序;

递归函数中,位于递归调用后的语句的执行顺序和各个被调用函数的顺序相反;

这两句话是什么意思啊?能帮忙解释一下吗?

正在回答

3 回答

我先把  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        <—— 这些 递归函数中,位于递归调用后的语句的执                                                                                                                     行顺序和各个被调用函数的 顺序相反

                                      。。。。推下出。

  希望能帮到你 :)


0 回复 有任何疑惑可以回复我~

这好比我们进入一层套一层的房子来取房子中的苹果,只是进去的过程只管开门、进入,而不取苹果,直到最里层,再退出房子,随手从里到外依次把房子里的苹果取出来。

这里,房子是递归函数,进入房子的钥匙是递归函数被调用语句前的语句,进入1层房子需要1号钥匙,进入2层房子需要2号钥匙,所以说使用钥匙的顺序和开门的顺序相同的。

苹果是调用递归函数语句后的语句,可以看出取苹果的顺序和开门的顺序是相反的。

4 回复 有任何疑惑可以回复我~

前面一句意思是:对于递归调用那一行语句之前的程序,先执行递归函数第一层然后再到第二层函数,再是第三层函数。   后面一句是说递归调用那一行后面的语句是最后执行第一层,然后倒数第二,,比如后面是输出语句,那就是第一层的输出是最后输出。像右边的例子中,n=1是第一层,n=2是第二层,输出的时候就是”第1天所剩桃子1534个”最后输出。。。。

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926210    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

两点不太懂!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信