www.rtmj.net > C语言 递归中的返回的 1 2 3 4 我不懂啊 求解 (详细点)

C语言 递归中的返回的 1 2 3 4 我不懂啊 求解 (详细点)

#include int Sum(int n) { if(n return n + Sum(n - 1); } int main( ) { int n; scanf("%d", &n); printf("%d\n", Sum(n)); return 0; }

从函数中可以看出,该getWordNumber函数的功能是实现1+2++n的累加getWordNumber函数中函数退出的条件是n=1,如果参数n不等于1,那么他返回的值是n+getWordNumber(n-1),这里会调用getWordNumber(n-1)比如求getWordNumber(3)首先返回3+getWordNumber(2)而调用getWordNumber(2)会返回2+getWordNumber(1)调用getWordNumber(1)会返回1,每一次的调用都返回到上一次调用的地方所以最后会得到返回到主函数的值3+2+1=6

结果Level 1:n location 0023ff10 第一次 传入1 N 追问: 我能理解求阶称的递归,但是就是不理解这个程序中递归返回的事情.为什么要返回?Level 4:n location 0023feb0 不就已经完了吗?还有当LEVEL 3:n location 0023fed0 的时候,n不就又小于4了吗,为什么不遵循if函数了? 追答: 因为N=4这次调用是N=3的时候调用的 N=4结束后 不就又返回调用的地方了么? IF函数都已经运行了 调用N=4的函数不就是在IF语句里面么? 怎么还能再次运行呢? 评论0 0 0

// fac的作用是求i的阶乘 int fac(int i) { if(i == 1) return 1; else return i*fac(i-1); } int main() { int i = fac(1)+fac(2)+fac(3)+fac(4)+fac(5)+fac(6); }

#include "stdio.h" int fun(int n) { if(n==1) return 1; else return n+fun(n-1); } int main() { int n; printf("请输入n:"); scanf("%d",&n); printf("1+2+3++n=%d\n",fun(n)); }

private int f(int n) { if(n==1) return 1; if (n > 1) return n * f(n - 1) ; return 0; } int main() { int s=0; for(int i=1;i<=6;i++) s+=f(i); printf("%d",s); }

#include "stdio.h" int sum1ton(int n) { if(n == 1): return 1; else return n + sum1ton(n - 1); } void main() { int n; scanf("%d",&n); int s = sum1ton(n); printf("%d",s); }

就是输出5,4,3,2,1啊,第一次调用函数a时,参数num=5,执行if语句判断判值为假,执行下面的printf函数,输出此时的num值为5,然后执行函数调用a(--num),此时的num=4,执行if语句判断值还是假如此下去,直到num=0时,if语句判断才为真,才执行return跳出函数a回到main函数,递归调用结束.希望对你有帮助.

递归的结构其实很简单,两部分组成1、结束递归的条件,要不然会无限递归下去2、就是递归的公式,以什么样的方式调用自己还有比较复杂的递归,就是双线和多线递归这个就是a调用b,b再调用c,c再调用a,等等的方式多个函数之间的互相调用每个函数都至少有这两部分组成

这个就是函数的递归了.在函数内调用本身.思路如下;首先是a=1进入f(a),然后在f(a)中迭代自己,不过参数传入(a+1)也就是2,一直往下迭代,直至a=6,迭代进行不下去,执行上一层迭代没有执行完的代码,也就是输出a=5,4,3,2,1的代码,最终的结果也就如您所示的样子.要是还不明白,就直接安装上面的程序画草图跟踪,不过建议将次数改为2或者3,因为迭代太多,你的头也不清楚了.呵呵呵

网站地图

All rights reserved Powered by www.rtmj.net

copyright ©right 2010-2021。
www.rtmj.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com