遞歸

分類

  • 直接遞歸 函數(shù)F的代碼直接包含了調(diào)用F的語句
  • 間接遞歸 函數(shù)F調(diào)用了函數(shù)G,G又調(diào)用了H,如此下去一直到F又被調(diào)用

定義

  • 遞歸必須包含一個基本部分,對于n的一個或者多個值,f(n)必須是直接定義的。
  • 遞歸部分,右側(cè)所出現(xiàn)的所有f的參數(shù)都必須有一個比n小的一邊重復(fù)運用遞歸部分來改變右側(cè)f,直至出現(xiàn)f的基本部分。

歸納證明

  • 歸納初值 (induction base)
    對于n的一個或者多個值,要證明的公司是成立的
  • 歸納假設(shè) (induction hypothesis)
    然后假定當n屬于0-m的時候公式是成立的,其中m是任意整數(shù)(大于等于驗證索取的最大值)
  • 歸納步證明(induction step)
    如果能夠證明對于n的下一個值(m+1)公式也成立,那么就可以確定該公式是成立的。

練習

  • 計算階乘
int factorial(int n)
{
    if(n<=1) return 1;
    else return n*factoral(n-1);
}
  • 求和
    累加
templeate<class T>
T sum(T a[],int n)
{
    T tsum=0;
    for (int i=0;i<n;i++)
    {
         tsum+=a[I];
    }
    retuan tsum;
}

遞歸運算

T rsum(T a[],int n)
{
    if (n>0)
        return rsum(a,n-1)+a[n-1];
    return 0;
}
  • 排列組合


    排列.png

    組合.png
template<class T>
void perm(T list[],int k,int m)
{//生成list[k:m]的所有排列
    int i;
    if (k==m){//輸出一個排列方式
        for( i = 0; i<=m;i++)
            cout<<list[i];
        cout<<endl;
    }
    else//list[k:m]有多個排列方式,遞歸的產(chǎn)生這些排列方式
    {
        for ( i = k; i<=m;i++)
        {
            swap(list[k],list[I]);
            perm(list,k+1,m);
            swap(list[i],list[k]);
        }
    }
}
inline void swap(T& a, T&b)
{//交換a和b
    T temp = a;
    a=b;
    b=temp;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 每章一點正能量:人的一生可能燃燒也可能腐朽。 前言 相信大家在面試或者工作中偶爾會遇到遞歸算法的提問或者編程,我們...
    Coder編程閱讀 1,523評論 0 2
  • 麻省理工學院公開課:算法導(dǎo)論。B站地址,網(wǎng)易公開課也有對應(yīng)的資源。https://www.bilibili.com...
    LuLuX閱讀 4,670評論 1 2
  • 前言 遞歸是算法中一種非常重要的思想,應(yīng)用也很廣,小到階乘,再在工作中用到的比如統(tǒng)計文件夾大小,大到 Google...
    謝kun閱讀 8,825評論 0 15
  • 前言 遞歸是算法中一種非常重要的思想,應(yīng)用也很廣,小到階乘,再在工作中用到的比如統(tǒng)計文件夾大小,大到 Google...
    風平浪靜如碼閱讀 317評論 0 0
  • 1. Masonry IB 時代,如果你還在用代碼絕對布局就太 low 了。隨著蘋果發(fā)布 iPhone6 、 iP...
    yangli閱讀 1,709評論 1 4

友情鏈接更多精彩內(nèi)容