C++_遞歸習題彙總

霍納規則

霍納規則是一種使用最少數目的乘法在點x0處計算多項式的方法。如果一個多項式爲A(x)=anxn+an-1xn-1+……+a1x+a0,則霍納規則爲:
A(x0)=(…(anx0+an-1)x0+…+a1)x0+a0

由公式可以看出括號內的部分即爲遞歸的過程,最後遞歸的出口應爲a0

#include <iostream>

using namespace std;

int Horner(int *a,int i,int x,int n)
{
    if(i==n-1)
        return a[i];
    else
    {
        return x*Horner(a,i+1,x,n)+a[i];
    }
}

int main()
{
    int a[]={1,2,3};
    cout << Horner(a,0,2,3)<<endl;
    return 0;
}

所有布爾值的組合

思路:將先申請n個布爾類型的內存地址,然後令第一個爲Ture,開始遞歸,然後令第一個數爲false,再遞歸,當到最後一個時,先設爲true,輸出,再設爲false輸出。

#include <iostream>

using namespace std;

void Printf(bool *a,int n)
{
    for(int i=0; i<n; i++)
    {
        if(a[i]) cout << "true" << " ";
        else cout << "false" << " ";
    }
    cout << endl;
}

void AllBool(bool *a,int k,int n)
{
    if(k==n-1)
    {
        a[k]=true;
        Printf(a,n);
        a[k]=false;
        Printf(a,n);
    }
    else
    {
        a[k]=true;
        AllBool(a,k+1,n);
        a[k]=false;
        AllBool(a,k+1,n);
    }
}

int main()
{
    int n;
    bool *a;
    n=2;
    a=new bool(n);
    AllBool(a,0,n);
    return 0;
}

階乘

#include <iostream>

using namespace std;

int Iterative(int n)
{
    int result = 1;
    for(int i=1;i<=n;i++)
    {
        result*=i;
    }
    return result;
}

int Recursive(int n)
{

    if(n==1)
        return n;
    else
        return n*Iterative(n-1);
}

int main()
{
    cout << Iterative(4) << endl;
    cout << Recursive(4) << endl;
    return 0;
}

斐波那契數列

#include <iostream>

using namespace std;


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

int Recursive(int n)
{
    int now=1,pre=0,pre_now;
    while(n>1)
    {
        pre_now=now;
        now=pre+now;
        pre=pre_now;
        n--;
    }
    return now;
}

int main()
{
    cout << Iterative(6) << endl;
    cout << Recursive(6) << endl;
    return 0;
}
發佈了101 篇原創文章 · 獲贊 19 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章