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

C语言递归 的问题,求详解???

C语言递归 的问题,求详解???

C
刘玉鹏 2015-09-12 10:37:42
#include <stdio.h>int get(n){       if(n ==1)    {        return 1;        }    else{        return get(n-1)+n;          }}int main(){    int num = get(3);    printf("小明第3天记了:%d个单词。\n", num);    return 0;}当n=3时,get(n-1)+n为get(2)+3;所以n=2时;//为什么这里=2,get(n-1)+n为get(1)+2;get(1)+2的结果为3;//这里=3.为什么上面=2?那么get(2)+3的结果为get(1)+2+3 = 3+3 = 6
查看完整描述

3 回答

?
leosstudio

TA贡献22条经验 获得超1个赞

建议你玩玩汉诺塔

查看完整回答
反对 回复 2015-09-12
?
leosstudio

TA贡献22条经验 获得超1个赞

看来数列没学好呀

查看完整回答
反对 回复 2015-09-12
?
onemoo

TA贡献883条经验 获得超454个赞

最初,在main函数中调用get(3):在get函数中会转到else处执行 return get(3 - 1) + 3;  这里是要将get(2)的返回值加上3再返回给main函数,所以又一次调用了get,但传入的参数是2。

那么程序流程就进入了这个get(2)中:在get(2)中还是会执行else分支,这次是 return get(2 - 1) + 2;  同理,这次get(2)将要把get(1) + 2的值返回给前面那次get(3)

程序流程进入get(1):这一次经if判断后直接返回了1。

这样前一次的get(2)的return语句得到的是就是1+2,那么get(2)把3返回给了get(3),而get(3)函数的return语句得到的值是3+3,这样就把6返回给了main函数。

这种自己调用自己,一层层深入调用下去的函数调用模式就是递归。递归中肯定会先设置一个递归截止条件(本例中就是n==1),然后自己调用自己,直到最深的一层调用碰到了截止条件后将相应的值返回给上一次调用,然后再返回上一次调用......层层返回最后将值带回最早的那次调用。

查看完整回答
反对 回复 2015-09-12
  • 3 回答
  • 1 关注
  • 1537 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信