1. 程式人生 > 實用技巧 >遞迴演算法小結

遞迴演算法小結

1.遞迴演算法思想

遞迴即程式反覆呼叫自身。解決遞迴問題,關鍵是找到遞迴公式邊界條件。

2.簡單示例

2.1使用遞迴公式求1+2+3+....+n的和。

#include <stdio.h>
int getsum(int n)
{
    if(n==1)
    {
       return 1;    
    }     
    return n+getsum(n-1);
} 

int main()
{
    printf("使用遞迴函式求1+..+100的和=%d",getsum(100));
    return 0;
}

執行結果:遞迴公式n+getsum(n-1),邊界條件是n==1,return 1;

2.2甲說比乙大2歲,乙說比丙大3歲,丙說比丁大1歲,丁說自己是18歲,求甲是多少歲?

#include <stdio.h>

/*甲說比乙大2歲,乙說比丙大3歲,丙說比丁大1歲,丁說自己是18歲,求甲是多少歲?*/
/*
分3種情況討論,假設n=4是甲,n=3是乙,n=2是丙,n=1是丁 
*/
int getAge(int n)
{
    if(n==1)
    {
       return 18;    
    } 
    if(n==2)
    {
      return getAge(1)+1;    
    } 
    if(n==3)
    {
      
return getAge(2)+3; } if(n==4) { return getAge(3)+2; } } int main() { printf("甲的年齡為%d\n",getAge(4)); printf("乙的年齡為%d\n",getAge(3)); printf("丙的年齡為%d\n",getAge(2)); printf("丁的年齡為%d\n",getAge(1)); return 0; }

執行結果:

2.3列印斐波那契數列的前15項

#include <stdio.h>
int
Fibonacci(int n) { if(n==1||n==2) { return 1; } return Fibonacci(n-1)+Fibonacci(n-2); } int main() { printf("求斐波那契數列的前15項:\n"); int i=1; for(i=1;i<=15;i++) { printf("(%d)=%d ",i,Fibonacci(i)); } return 0; }

執行結果:

參考文章:

https://www.cnblogs.com/protectione055/p/11828604.html

https://www.cnblogs.com/king-lps/p/10748535.html