遞迴演算法是把問題轉化為規模縮小了的同類問題的子問題,然後遞迴呼叫函式(或過程)來表示問題的解。乙個過程(或函式)直接或間接呼叫自己本身,這種過程(或函式)叫遞迴過程(或函式)。
遞迴過程一般通過函式或子過程來實現。遞迴方法:在函式或子過程的內部,直接或者間接地呼叫自己的演算法。遞迴其實就是在棧記憶體中不斷的載入同乙個函式
當乙個功能被重複使用,而每一次使用該功能時的引數不確定,都由上次的功能元素結果來確定。
遞迴的注意事項
必須有可最終達到的終止條件,否則程式將陷入無窮迴圈出現棧記憶體溢位錯誤(stackoverflowerror);
子問題在規模上比原問題小,或更接近終止條件;
子問題可通過再次遞迴呼叫求解或因滿足終止條件而直接求解;
子問題的解應能組合為整個問題的解。
下面用遞迴來實現從1+2+3+...n的小例子。
package com.hope.note.algorithms;
public class recursion else {
return n + sum(n - 1);
上面的例子採用遞迴演算法從1加到100,看著是倒著來的從100加到1,每次減1進行相加真到最後為1終止。
演算法小談 遞迴
基本概念 乙個函式呼叫它自身,就是遞迴 如求n的階乘的遞迴 includeusing namespace std int factorial int n int main 這裡在求n的階乘時,我們就用到遞迴的概念。假如n 3,那麼函式首先呼叫factorial 3 將函式呼叫壓入棧,繼續呼叫fact...
演算法基礎篇(1)迴圈和遞迴
一般情況下,只有在處理大量資料時才會借助於計算機,所以演算法設計中很重要的工作是把對資料的處理歸結成較為規範的可重複的 機械化操作 然後交給計算機去完成。即將重複處理的大量資料的步驟抽象化成 迴圈 或 遞迴 的模式,設計出可以針對不同規模解決問題的演算法。迴圈演算法設計中,乙個重要的工作就是從已經建...
Java程式設計演算法基礎 遞迴與迴圈關係
理論上,任何迴圈都可以用遞迴來代替。有些函式式語言甚至不提供迴圈結構,而僅僅使用遞迴。當然,遞迴也可以通過迴圈和自己定義的棧結構來模擬。遞迴與數學上的遞推公式有點相似,相同點在於都是在尋找相似性 package no4 public class test03 public static void m...