#include <stdio.h>int lzhzuibang(int l){ int sum; if(l==1) { return 10; } else { sum = (lzhzuibang(l-1))+2; printf("第%d个人%d岁\n",l,sum); return sum; } }int main() { int y = lzhzuibang(5); printf("第五个人的年龄是%d岁\n",y); getchar(); }还是不太懂递归函数大神帮忙解释一下
1 回答
Atlas_Wu
TA贡献3条经验 获得超3个赞
递归就是函数自己调用自己。可以把递归看成是一个盒子,先放进去的数据在下面,要后取出来的。比如你这个程序中 l 的值为5, 求lzhzuibang(5)。
lzhzuibang(5)=lzhzuibang(4)+2
lzhzuibang(4)=lzhzuibang(3)+2
lzhzuibang(3)=lzhzuibang(2)+2
lzhzuibang(2)=lzhuzuibang(1)+2
lzhzuibang(1)=10,
lzhzuibang(1)是最后放进去的,所以最先取出来,并且值返回都上一步递归,这样就依次算出上面的值,最终得到lzhuzuibang(5)的值。
要注意的是,在递归结束之前,也就是lzhzuibang(5)求出之前,lzhzuibang(1)到lzhzuibang(4)都是作为临时变量存放于内存当中等待递归的返回值,因此会占用一定的内存空间。如果递归的次数很大,比如你把5改成50000或更大,那么就会出现内存的溢出。
你的问题“sum=(lzhzuibang(l-1))+2里的l-1什么时候是加号什么时候是减号”,我不是很明白什么意思?
- 1 回答
- 0 关注
- 1611 浏览
添加回答
举报
0/150
提交
取消