C语言递归函数问题
展开全部
因为递归要存在一个最低层,这样才会有限,否则没有最低层的话,将会一直运行下去没有止境.
所以加个if
(n<=1)表示他的最低层n的值是1,而根据你代码palin(i),n的最初值是i,也就是5,所以
第一层n的值是5,如果n的值大于1,那么就运行else里面的语句进入下一层palin(n-1)
第二层的时候n的值是上一层中的n-1也就是5-1=4
一直这样下去到n=1的时候运行if里的语句,里面不会再出现palin函数,就到达最底层.
然后运行完,逐层弹出去.
就是这样自己函数再读入自己函数,形成递归.
如果解释不明白
直接call我或者补充问题吧`
所以加个if
(n<=1)表示他的最低层n的值是1,而根据你代码palin(i),n的最初值是i,也就是5,所以
第一层n的值是5,如果n的值大于1,那么就运行else里面的语句进入下一层palin(n-1)
第二层的时候n的值是上一层中的n-1也就是5-1=4
一直这样下去到n=1的时候运行if里的语句,里面不会再出现palin函数,就到达最底层.
然后运行完,逐层弹出去.
就是这样自己函数再读入自己函数,形成递归.
如果解释不明白
直接call我或者补充问题吧`
展开全部
好的我帮你你分析以下你的程序:
1
调用是age(5)
它再调用age(4),然后返回age(4)+2
2
age(4)过程中调用age(3),然后返回age(3)+2
3
在age(3)过程中调用age(2),然后返回age(2)+2
4
在age(2)过程中调用age(1),然后返回age(1)+2
5
在age(1)过程中,直接返回10的值。
由上过程可以看出递归深度是5,
那么:age(5)=age(4)+2
age(4)=age(3)+2
age(3)=age(2)+2
age(2)=age(1)+2
age(1)=10
所以
age(5)=18
这仅仅是一个单向递归,深度是单向延伸的。还有向广度延伸的
1
调用是age(5)
它再调用age(4),然后返回age(4)+2
2
age(4)过程中调用age(3),然后返回age(3)+2
3
在age(3)过程中调用age(2),然后返回age(2)+2
4
在age(2)过程中调用age(1),然后返回age(1)+2
5
在age(1)过程中,直接返回10的值。
由上过程可以看出递归深度是5,
那么:age(5)=age(4)+2
age(4)=age(3)+2
age(3)=age(2)+2
age(2)=age(1)+2
age(1)=10
所以
age(5)=18
这仅仅是一个单向递归,深度是单向延伸的。还有向广度延伸的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
仔细分析下你的程序:
一次调用age(n),实参n=5!=1,所以c在第一次调用时是随机值,age(5)=c=age(4)+2
二次调用age(n),实参n=4!=1,age(4)=c=c+2;
三次调用age(n),实参n=3!=1,age(3)=c=c+2;
四次调用age(n),实参n=2!=1,age(2)=c=c+2;
五次调用age(n),实参n=1,age(1)=c=c+2;此时的c实际上已经等于一次调用时的c值+8;而c此时被赋值为10,所以age(5)=18;
一次调用age(n),实参n=5!=1,所以c在第一次调用时是随机值,age(5)=c=age(4)+2
二次调用age(n),实参n=4!=1,age(4)=c=c+2;
三次调用age(n),实参n=3!=1,age(3)=c=c+2;
四次调用age(n),实参n=2!=1,age(2)=c=c+2;
五次调用age(n),实参n=1,age(1)=c=c+2;此时的c实际上已经等于一次调用时的c值+8;而c此时被赋值为10,所以age(5)=18;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询