递归(时间复杂度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;
}

所谓递归就是重复调用函数自己本身递归(时间复杂度O(n),空间复杂度O(n))_第1张图片斐波拉契是最不适合用递归的方法,时间复杂度太大
//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(n1)
{
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
}
}
递归(时间复杂度O(n),空间复杂度O(n))_第2张图片

你可能感兴趣的:(基础)