算法學習(一):遞歸與分治策略(1)

  1. 基本思想
    將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。
  2. 前提
    原問題可以分割成k個子問題,1< k ≤n,且這些子問題都可以解,並可利用這些子問題的解求出原問題的解。
  3. 先看一個簡單的例子。
/*
階乘算法
*/
#include<iostream>
using namespace std;
int factorial(int n);//計算n的階乘
int main()
{
    int n;
    cin>>n;
    cout<<factorial(n)<<endl;   
}
int factorial(int n)
{
    if(n==0)
        return 1;
    return n*factorial(n-1);//遞歸
}

再看一個例子,爲方便起見,只寫關鍵代碼。

/*
求斐波那契數列第n位數值(從0開始)
*/
int Fibonacii(int n)
{
    if(n<=1)
        return 1;
    return Fibonacii(n-1)+Fibonacii(n-2)//遞歸;
}

因此,只要將遞歸表達式及結束遞歸條件找出來,就很容易寫出遞歸算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章