遞歸和迭代

  • 遞歸的基本概念:程序調(diào)用自身的編程技巧稱為遞歸,是函數(shù)自己調(diào)用自己。
  • 使用遞歸要注意的有兩點:
    • 遞歸就是在過程或函數(shù)里面調(diào)用自身;
    • 在使用遞歸時,必須有一個明確的遞歸結(jié)束條件,稱為遞歸出口。
  • 遞歸分為兩個階段:
    • 遞推:把復(fù)雜的問題的求解推到比原問題簡單一些的問題的求解;
    • 回歸:當(dāng)獲得最簡單的情況后,逐步返回,依次得到復(fù)雜的解。
int fib(int n)
{
   if(0 == n)
       return 0;
   if(1 == n)
       return 1;
   if(n > 1)
       return fib(n-1)+fib(n-2);
}

  • 迭代:利用變量的原值推算出變量的一個新值。
    • 如果遞歸是自己調(diào)用自己的話,迭代就是A不停的調(diào)用B;
    • 對一組命令(或一定步驟)進行重復(fù)執(zhí)行,在每次執(zhí)行這組命令(或步驟)時,都從變量的原值退出它的一個新值。
  • 利用迭代算法解決問題,需要做好以下三個方面的工作:
    • 確定迭代變量:在可以用迭代算法解決的問題中,至少存在一個直接或間接地不斷由舊值遞推出新值的變量,這個變量就是迭代變量;
    • 建立迭代關(guān)系:所謂迭代關(guān)系,指如何從變量的前一個值推出其下一個值的公式(或關(guān)系)。迭代關(guān)系式的建立是解決問題的關(guān)鍵,通常可以使用遞推或倒推的方法來完成;
    • 對迭代過程進行控制:在什么時候結(jié)束迭代過程。

  • 遞歸中一定有迭代,但是迭代中不一定有遞歸,大部分可以相互轉(zhuǎn)換。
  • 能用迭代的不用遞歸,遞歸調(diào)用函數(shù),浪費空間,并且遞歸太深容易造成堆棧的溢出。

  • 遞歸設(shè)計:
    • 先寫出一次執(zhí)行函數(shù);
    • 再寫母函數(shù),按條件調(diào)用自己。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 一 遞歸 遞歸的基本概念: 程序調(diào)用自身的編程技巧稱為遞歸,是函數(shù)自己調(diào)用自己.一個函數(shù)在其定義中直接或間接調(diào)用自...
    道阻且長_行則將至閱讀 950評論 1 5
  • 感謝社區(qū)中各位的大力支持,譯者再次奉上一點點福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運大獎:點擊這里領(lǐng)取 在...
    HetfieldJoe閱讀 1,826評論 0 14
  • 1、知乎回答摘錄 遞歸是一個樹結(jié)構(gòu),每個分支都探究到最遠,發(fā)現(xiàn)無法繼續(xù)的時候往回走,每個節(jié)點只會訪問一次。迭代是一...
    yikemi閱讀 469評論 0 0
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,536評論 1 51
  • 1、調(diào)用Camera的open方法打開相機 2、調(diào)用Camera的getParameters()方法獲取拍照參數(shù),...
    蘇文星閱讀 234評論 0 0