#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;
}

了解递归的原理_#include_02


这里的结果对于初学者来说估计就是不合理的了。

简单介绍一下,

第一个里面 tree(2n);
n 对应于 在递归里执行了 n=2 4 8 16
第二个里面 首先tree(2
n);

n 对应于 在递归里执行了 n=2 4 8 16之后

第二个里面 其次tree(2n+1);
会在tree(2
n+1);再执行一次n=2 4 8 16

但是顺序反过来的。虽说反过来,但是要满足终止条件后才会停止。

所以,递归没有那么简单。这个是利用递归创建二叉树的基础。

这个不懂的话,就不会明白递归二叉树的原理。

有兴趣的可以研究一下汉诺塔,也是利用递归实现的。