斐波那契和漢諾塔實現 遞迴演算法

2021-10-03 00:13:03 字數 983 閱讀 1645

遞迴的意思就是乙個函式在自己內部不斷呼叫自己的過程,通過反覆呼叫,可以用步步蠶食的方法,解決掉乙個比較複雜的問題。總之的遞迴的核心在於分而治之的思想,在大的問題中發現規律,把體量較大的問題分割開,從問題最小的部分入手,由小到大,逐步解決問題。

相信好多人第一次看遞迴的**都覺得,這個**不複雜啊,才幾十行而已,但是細讀發現並不好理解,這也正是遞迴的特點,由於在函式中呼叫函式本身,往往不容易看懂遞迴的終止條件。

下面通過兩道經典問題來具體解釋一下遞迴的精髓:

這道題目可以說是遞迴思想最經典的體現:原題入口

漢諾塔是一種古老的遊戲。

一共3個柱子,標號為1,2,3

1號柱子有從大到小一共n個盤子。

每次移動最上方的乙個盤子,可以移動到其他的柱子。

任何乙個盤子,都不能疊在比它更小的盤子的上方。

請把盤子從1號柱子,全部移動到3號柱子。

起始:移動到這樣:

現在,給出了n個盤子,請你描述一下用最短次數移動的過程。

移動步驟:

(1)先把n-1個盤子由1——2,大的在下,小的在上;

(2)再將1號柱的第n個盤子移動到3柱;

(3)最後把2柱的剩餘盤子借助1柱移到3柱

以上步驟實際上是乙個重複的過程,則整個問題可以使用遞迴解決,當盤子個數為1時直接移動即可,為n時則先借助一根針將n-1個盤子移動到另一根針上,而n-1根針可以先移動n-1-1根針,如此往復。

void

move

(int n,

char x1,

char x2,

char x3)

else

}

斐波那契數列當n>3時,第n個元素的值等於第n-1個元素和n-2個元素的和,當n不確定具體數值時,可以通過遞迴的方式實現,先給定前兩個元素的值1,從第三位開始遞迴

int

fib(

int n)

遞迴 斐波那契數列 漢諾塔

遞迴 在乙個方法 函式 的內部呼叫該方法 函式 本身的程式設計方式。遞迴 public static void print int i public class testfebonacci 列印第n項斐波那契數列 public static int febonacci int i else publ...

遞迴斐波那契數列和漢諾塔

程式呼叫自身的程式設計技巧稱為遞迴 在高階語言中,函式呼叫自己和呼叫其他函式並沒有本質的不同。我們把乙個直接呼叫自己或通過一系列的呼叫語句間接地呼叫自己的函式,稱作遞迴函式 斐波那契數列指的是這樣乙個數列 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img anzoocxp 1607...

遞迴 漢諾塔問題和斐波那契數列

1.遞迴 遞迴簡單來講就是方法內部呼叫方法本身,它有如下要求 1.必須要有臨界條件,也就是遞迴必須要有出口,不能無限制的向深層呼叫方法,否則會棧溢位。2.漢諾塔問題 問題 有三根柱子 a,b,c。a柱子上有3個盤子,分別是1,2,3,如何使用最少的移動次數,將3個盤子從柱子a移動到柱子c?規則 1....