#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 回答
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),然后自己调用自己,直到最深的一层调用碰到了截止条件后将相应的值返回给上一次调用,然后再返回上一次调用......层层返回最后将值带回最早的那次调用。
- 3 回答
- 1 关注
- 1537 浏览
添加回答
举报
0/150
提交
取消