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

谁能给个详细的解释,真的没懂

那个递归函数到底咋样运行的?

正在回答

3 回答

递归函数就是将在自己方法本身调用自身,可以举个生活中的小例子

例如某天,一个老师让他拿着一堆数字开片,他给自己的学生每个人一张,,老师只要求大于等于0的人来按顺序排队,他将一个50给了第一个人,然后要求比他小10的人站出来,之后要求比前一个(就是50-10,拿到40的人)小10的人站出来,然后再出来一个比上一个小10的人出来,以此类推,直到有拿到了0的站出来,那么这一队当中就有了

50,40,30,20,10,0这几数字的持有者,老师要求大于等于0的人就是这个递归的结束语句,因为只要求大于等于0的,最后一个是0,比他小10的人肯定不大于他,所以递归结束

int getSum(int n);    //定义方法
int main()    //主函数,程序入口
{
    int i = getSum(50);    //定义一个变量用于接收getNum方法的返回值
    printf("这几个人手中的卡片总和为%d\n",i);
}
int getSum(int n)    //刚刚定义了getSum方法,这里是具体实行
{     //这两个方法中的 i 都是在方法中定义,为局部变量,所以互不干扰
    if(n > 0)
    {
        int i = getSum(n-10) + n;  //以下进行详细解析,解析代码不符合标准写法,只是形式相同
        return i;
     }
     return 0;//在n的值小于0以前不执行这个
}

这个代码它的实际流程是这样,主函数还是上面那个,不写了

int getSum(int n) //主函数调用时传入实参给此形参,实参值为50,所以这个形参也就是50
{                 // 1 刚刚调用了本方法,并且传入了40,往下执行
                  // 2 刚刚调用了本方法,并且传入了30,往下执行
                  // 3 刚刚调用了本方法,并且传入了20,往下执行
                  // 4 刚刚调用了本方法,并且传入了10,往下执行
                  // 5 刚刚调用了本方法,并且传入了0,往下执行
                 
     if(n > 0)    //步骤 5 的值是 0 ,一个数是不大于自身的,所以 0 不大于 0,不满足,if当中的不执行
     {
         int i = getSum(n - 10) + n; //此处传入n - 10,也就是将40传入,然后调用本方法,步骤 1
                                     //执行到此说明 n 还是大于0,将40-10传入调用本方法,步骤2
                                      //执行到此说明 n 还是大于0,将30-10传入调用本方法,步骤3
                                      //执行到此说明 n 还是大于0,将20-10传入调用本方法,步骤4
                                      //执行到此说明 n 还是大于0,将10-10传入调用本方法,步骤5
                                      //由于步骤5传入的值是0,不满足if判断,所以没法在执行这里
                                      
                                      //接收到步骤 5 所返回的值,执行 i = 0 + n,此处的 n 为10 ,然后执行return返回 0+10 结果给调用步骤4的方法
                                      //接收到步骤 4 所返回的值,执行 i = 10 + n,此处的 n 为20 ,然后执行return返回 10 + 20 结果给调用步骤3的方法
                                      //接收到步骤 3 所返回的值,执行 i = 30+ n , 此处的 n 为30,然后执行return返回 30 + 30 结果给调用步骤2的方法
                                     //接收到步骤 2 所返回的值,执行 i = 60 + n , 此处的 n 为 40,然后执行return返回 60 + 40 结果给调用步骤1的方法
                                     //接收到步骤 1 所返回的值,执行 i = 100 + n , 此处的 n 为 50,然后执行return返回 100 + 50 结果给main方法
         return i;                    
         
     }
     return 0; //返回一个值给刚刚调用步骤 5 的方法
}

用起来没觉得的,说起来真乱,我想不到通俗的解释,如果觉得太乱了就别看了,免得被我误人子弟。。。


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

黄锋 提问者

非常感谢!
2015-07-12 回复 有任何疑惑可以回复我~
#2

qq_Guardianship_0

num =(getPeachNumber(n+1)+1)*2; 这个没看懂
2015-07-18 回复 有任何疑惑可以回复我~

好厉害,程序猿我敬你

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

你说的更加复杂,不过你学的很好啊,大神

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

举报

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

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

进入课程

谁能给个详细的解释,真的没懂

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