递归(时间复杂度O(n),空间复杂度O(n))

//.h头文件存放对外声明
//.c .cpp源文件存放实现
头文件中的<>包含系统文件
头文件中的“”先找自定义里的文件,再找系统里的文件

关于递归
第一个人年龄为10
第二个比第一个大2
第n个人?
Age(1):第一个人年龄
Age(2):第二个人年龄
Age(n-1):第n-1个人年龄
Age(n):第n个人年龄

int Age(int n)
{
	int tmp;
	if(n==1)
	{
		return 10;
	}
	else
	{
		tmp=Age(n-1)+2;
	}
	return tmp;
}

所谓递归就是重复调用函数自己本身在这里插入图片描述斐波拉契是最不适合用递归的方法,时间复杂度太大
//F(n)=F(n-1)+F(n-2)
//F(1)=F(0)=1
//F(3)=F(2)+F(1)
//F(4)=F(3)+F(2)
int Fibon1(int n)
{
int f1=1;
int f2=1;
int f3=1;
for(int i=2;i<=n;i++)
{
f3=f1+f2;
f1=f2;
f2=f3;
}
return f3;
}

int Fibon2(int n)
{
if(n==-1||n0)
{
return 1;
}
else
{
return Fibon2(n-1)+Fibon2(n-2);
}
}
最适合用递归的例子Hanoi
void Move(char x,char y)
{
printf("%c->%c\n",x,y);
}
void Hanoi(int n,char a,char b ,char c)
{
if(n
1)
{
Move(a,c);
}
else
{
Hanoi(n-1,a,c,b);//上面3个通过c移到b
Move(a,c);//下面1个通过a->c
Hanoi(n-1,b,a,c);//b上3个a->c
}
}
在这里插入图片描述