假设n=9
创新互联建站是一家集网站建设,柯桥企业网站建设,柯桥品牌网站建设,网站定制,柯桥网站建设报价,网络营销,网络优化,柯桥网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
1判断n=9非0,把n=9压入栈中,执行ttor(4);栈中为9
2判断n=4非0,把n=4压入栈中,执行ttor(2);栈中为9,4
3判断n=2非0,把n=2压入栈中,执行ttor(1);栈中为9,4,2
4判断n=1非0,把n=1压入栈中,执行ttor(0);栈中为9,4,2,1
5判断n=0不满足条件,函数结束
6从栈中取出n=1,执行ttor(1)的剩余部分,输出1
7从栈中取出n=2,执行ttor(2)的剩余部分,输出0
8从栈中取出n=4,执行ttor(4)的剩余部分,输出0
9从栈中取出n=9,执行ttor(9)的剩余部分,输出1
#include stdio.h
void func(int m,int n)
{
if(m)
{
if(n)
{
func(m,n-1);
printf("%d",m);
}
else
{
func(m-1,m-1);
if(m1)
{
printf("\n");
}
}
}
}
int main(void)
{
func(5,5);
return 0;
}
首先是要这个求解的问题,适合用递归方法来进行求解。找到这个递归解法结束递归的条件。递归函数中,首先第一个语句就是如果满足递归条件,就直接返回确定的值,否则返回使用递归方法求解的表达式。
也就是直接或间接的调用自身的函数
比如5个坐在一起论年龄,问第五个人多少岁?他说比第四个人大两岁。问第四个人多少岁,他说比第三个人大两岁。问第三个人多少岁,他说比第二个人大两岁。问第二个人多少岁,他说比第一个人大两岁。问第一个人多少岁,他说10岁。请问第五个人几岁?
int age(int n)
{ int x;
if(n1) x=age(n-1)+2;
else if(n==1) x=10;
return x;
}
void main( )
{ printf("%d",age(5));}
执行x后的确是age(4)+2
但age(4)又是一次函数调用,于是得到age(3)+2
age(3)再次调用得到age(2)+2
age(2)再调用得到age(1)+2
age(1)调用得到10
依次加上去10+2+2+2+2得到18
调用过程就是自己调用自己,直到满足退出条件,这个很重要
比如要求5的阶乘,先要求4的阶乘,接着求3的阶乘,。。。最后当n=1时,直接return 1
也就结束了递归。其实很好理解的。。