遞迴演算法是將重複問題分解為同類的子問題而解決問題的方法,其核心思想是分治策略。
簡單來說就是自己呼叫自己。直到達到退出遞迴的條件,則完成遞迴。
1、找整個遞迴的終止條件:遞迴應該在什麼時候結束?
3、本級遞迴應該做什麼:在這一級遞迴中,應該完成什麼任務?
優點:遞迴的核心思想就是將乙個大問題,拆解成乙個小問題,然後將小問題再次拆解,層層拆分從而簡化問題的實現。從而達到簡化重複的**讓程式變得更加簡潔。
//階乘的遞迴實現
public
static
long f(int
n)
4.2 斐波納契數列
斐波納契數列,又稱**分割數列,指的是這樣乙個數列:1、1、2、3、5、8、13、21、……
在數學上,斐波納契數列以如下被以遞迴的方法定義:f0=0,f1=1,fn=f(n-1)+f(n-2)(n>=2,n∈n*)。
publicstatic
int fibonacci(int
n) return fibonacci(n - 1) + fibonacci(n - 2); //
相同重複邏輯,縮小問題的規模
}
4.3 漢諾塔問題
/*** title: 漢諾塔問題
* description:古代有乙個梵塔,塔內有三個座a、b、c,a座上有64個盤子,盤子大小不等,大的在下,小的在上。
* 有乙個和尚想把這64個盤子從a座移到c座,但每次只能允許移動乙個盤子,並且在移動過程中,3個座上的盤子始終保持**在下,
* 小盤在上。在移動過程中可以利用b座。要求輸入層數,運算後輸出每步是如何移動的。**/
public
class
hanoitower
else
基礎演算法 遞迴
遞迴用處很廣,可以將複雜問題簡單化。很多問題都可以使用遞迴演算法或結合遞迴演算法得到解決。那麼,設計遞迴演算法的關鍵是什麼?其關鍵之處在於,正確分析出2種型別的節點 出口節點和入口節點 一 演算法關鍵 出口節點 入口節點 遞迴問題可看做是由各個節點構成,而所有節點只能分為出口節點 入口節點兩類。1 ...
演算法基礎 遞迴
乙個函式呼叫其自身,就是遞迴 遞迴和普通函式呼叫一樣是通過棧實現的 替代多重迴圈 解決本來就是用遞迴形式定義的問題 將問題分解為規模更小的子問題進行求解 例題 n皇后問題 n皇后問題 輸入整數n,要求n個西洋棋的皇后,擺在n n的棋盤上,互相不能攻擊,輸出全部方案。輸入乙個正整數n,則程式輸出n皇后...
演算法 遞迴基礎
資料結構 int st n 記錄每個位置當前的狀態 0還沒考慮,1表示選它,2表示不選它 include include include include using namespace std const int n 16 int n int st n 記錄每個位置當前的狀態 0還沒考慮,1表示選它...