了解递归的原理
原创
©著作权归作者所有:来自51CTO博客作者櫻木的原创作品,请联系作者获取转载授权,否则将追究法律责任
#include<stdio.h>
#include<stdlib.h>
int tree(int n)
{
printf("result:%d\n",n);
if(n>20)
{
return 0;
}
if(n==1 || n==0)
{
return 1;
}
printf("*********************0\n");
tree(2*n);
//printf("*********************1\n");
//tree(2*n+1);
//printf("*********************2\n");
return n;
}
int main()
{
int t;
int n;
scanf("%d",&t);
n=tree(t);
printf("result:%d\n",n);
return 0;
}
这里很简单,不做赘述
#include<stdio.h>
#include<stdlib.h>
int tree(int n)
{
printf("result:%d\n",n);
if(n>20)
{
return 0;
}
if(n==1 || n==0)
{
return 1;
}
printf("*********************0\n");
tree(2*n);
printf("*********************1\n");
tree(2*n+1);
printf("*********************2\n");
return n;
}
int main()
{
int t;
int n;
scanf("%d",&t);
n=tree(t);
printf("result:%d\n",n);
return 0;
}
这里的结果对于初学者来说估计就是不合理的了。
简单介绍一下,
第一个里面 tree(2n);
n 对应于 在递归里执行了 n=2 4 8 16
第二个里面 首先tree(2n);
n 对应于 在递归里执行了 n=2 4 8 16之后
第二个里面 其次tree(2n+1);
会在tree(2n+1);再执行一次n=2 4 8 16
但是顺序反过来的。虽说反过来,但是要满足终止条件后才会停止。
所以,递归没有那么简单。这个是利用递归创建二叉树的基础。
这个不懂的话,就不会明白递归二叉树的原理。
有兴趣的可以研究一下汉诺塔,也是利用递归实现的。