1. 程式人生 > >遞迴和簡單應用

遞迴和簡單應用

遞迴:自己呼叫自己。

按步前進;規模逐漸縮小。需要說明邊界條件,返回值。

常用案例:

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。