递归和简单应用

递归:自己调用自己。

按步前进;规模逐渐缩小。需要说明边界条件,返回值。

常用案例:

1.阶乘                       

递归:

int Fac(int n)
{
  if(n==1||n==0)
    return 1;
  else 
    return Fac(n-1)*n;
}

循环:

int Fac(int n)
{
   int tmp=1;
     for(int i = 1; i <= n; i++ )
      {
          tmp*=i;
      }            
     return tmp;
}

2.求前n项的和

递归

int Sum(int n)
{
  if(n==0)
    return 0;
  else
    return Sum(n-1)+n;
}

循化 

int Sum(int n)
{
  int tmp=0;
    for(int i=0 ; i<=n ; i++)
  tmp+=i;
    return tmp;
}

 

3.Fibon数列

递归

int Fibon(int n)
{
  if(n==1||n==2)
    return 1;
  else
    return Fibon(n-1)+Fibon(n-2);
}

循环

int Fibon(int n)
{
  int f1=1;
  int f2=1;
  int f3;
  for(int i=0;i<=n;i++)
    {
	f3=f1+f2;
	f1=f2;
	f2=f3;
    }
   return f3;
}

4.汉诺塔

#include<stdio.h>
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);
	  Move(a,c);
	  Hanoi(n-1,b,a,c);
    }
	
}
int main()
{
	Hanoi(2,'A','B','C');
} 

   当汉诺塔的盘数大于2时,调用Hanoi函数以实现将n-1个盘从b移动到c。比如当n=2时,A->B,这时给Hanoi传递参数时调整b与c的顺序,而Move移动时就把最上层的盘移动到b上了,Move(a,c)可以把a移动到b上,最后将a,b柱的位置调整,使得 Move(a,c)执行时将b上的盘移动到c。如图:

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值