遞迴的用法

2021-09-28 16:04:56 字數 1428 閱讀 7893

遞迴是一種方法內呼叫自身方法的一種程式設計技術,像一些階乘、求和等數學問題可以實現,不過複雜度會提高,最能體現遞迴之美的當屬漢諾塔問題。同樣我們用遞迴實現了斐波那契數列和三角數字。
漢諾塔問題:如下圖所示,要求將乙個座上的盤子全部搬運到最後乙個支柱上,有乙個輔助支柱。

搬運規則:

1.一次只能移動一張盤子

2.不能將較大的盤子放在較小的盤子上面

3.最後盤子只能全部放在某乙個支柱上面

搬運示意圖:下圖是總數為3的搬運過程

顯然,當進行到第三次搬運時,就回到總數為2的搬運題目,而第n個盤子可以在接下來的一步放入目標支柱(如上圖的第四步);因此,我們可以考慮上面n-1塊的盤子搬運問題,而n-1塊的盤子搬運又可以看成是上面為n-2塊加最底層那塊,同樣連續呼叫相同的方法解決,最後歸結為一塊的搬運問題。

下面是實現**:

package recursion;

//遞迴方法的使用,test(),test2();

public

class

recursion1

public

static

void

test()

public

static

void

test2

(int k)

test2

(--k)

;//繼續呼叫該方法

}//三角數字(該數列的第n項是由第n-1項加上n得到)

public

static

intredetangle

(int n)

else

}//斐波那契數列:第一項為0,第二項為1,第n項為第n-1項和第n-2項的和

public

static

intrefeibbo

(int n)

else

if(n==2)

else

}//漢諾塔問題:所有盤子從大到小依次放在a座,需要將a座所有盤子搬到c座,每次只能移動乙個盤子,且任何盤子不能放在比自己小的盤子上面

//引數說明:topn表示盤子個數,start表示開始的座,middle表示中間座,endle表示最後移入的座

public

static

void

hanruota

(int topn,

char start,

char middle,

char endle)

else

}}

JS遞迴的用法JavaScript遞迴)

函式中用呼叫函式自己,此時就是遞迴,遞迴一定要有結束條件 function f1 f1 瀏覽器崩潰,因為沒有結束條件 死迴圈 改進如下 var i 0 function f1 console.log 從前有座山,山里有個廟,廟裡有個老和尚給小和尚講故事 f1 遞迴實現 求n個數字的和 n 5 5 4...

遞迴的幾種用法

以前一直對遞迴發怵,一想到它就 渾身哆嗦 但是遞迴確實是非常精髓和精妙的,有時候處理問題會非常的方便。比如排序,遍歷目錄下的檔案什麼的,但是老這麼怕他也不是個辦法.先看乙個排序的 現有122345六個數,要求用乙個main函式實現所有不同的排序並列印出來,要求 4不能在第三位,3和5不能相連 某公司...

python遞迴函式的用法

def fact n if n 1 return 1 return n fact n 1 遞迴函式的使用能夠簡化程式,但同時面對可能出現棧溢位的問題 解決方案是 解決遞迴呼叫棧溢位的方法是通過尾遞迴優化,事實上尾遞迴和迴圈的效果是一樣的,所以,把迴圈看成是一種特殊的尾遞迴函式也是可以的。尾遞迴是指,...