递归:C运行时堆栈支持递归函数的实现,递归函数就是直接或者间接调用自身的函数。
经典:
1.求n! .x^n
2.求菲波那契数列
3.求整数转换为字符 //4267 ===> ‘4’ ‘2’ '6' '7'
4 求最大公约数和最小公倍数。
5.汉诺塔问题
阶乘and x^n:
int f(int n)
{
if(n==1)
return n;
return n* f(n-1);
}
int g(int x,int n)
{
if(n==1)
return x;
return x*g(x,n-1);
}
菲波那契数列:
int recfbnq(int n)
{
if(n<=2)
return 1;
return recfbnq(n-1)+recfbnq(n-2);
}
int fbnq(int n)
{
int t1=1,t2=1,i,res;
if(n==1)
return 1;
for(i=1;i<n-1;i++)
{
res=t1+t2;
if(i%2!=0)
t1=res;
else
t2=res;
}
return res;
}
字符转换:
void print(int n)
{
int flag;
flag=n/10;
if(flag!=0)
print(flag);
putchar(n%10+'0');
cout<<endl;
}
汉诺塔问题:
void hanno(char from,int n,char to,char spare)//n个盘子在A上,先把n-1个盘子移到C上,再把n号盘子到B,
// 以此类推
{
if(n>0){
hanno(from,n-1,spare,to);//把上面n-1个盘子移到空位
printf("move %d %c===>%c\n",n,from,to);//移动第n个
hanno(spare,n-1,to,from);//把空位上n-1个盘子移到目的地。
}
}
递归代码可读性高,易于理解,占用大量堆栈空间
迭代:可读性较差,但是局部变量都在函数内部,节省了空间。