漢諾塔問題是演算法中的經典中的經典,是遞迴思想的入門問題。一般是這樣描述:左中右三根柱子,左邊柱子上有n個圓盤 每個圓盤從下至上從大到下排列,移動過程中小的圓盤不能放在大圓盤下面,要求將左邊柱子上的圓盤全部移動到右邊圓盤上,可以借助中間的圓盤。返回其時間複雜度並且列印每乙個步驟。
分析:
首先用特例來初步了解過程即n=2的時候 左邊有兩個圓盤大圓盤編號為做左1放在下面,小圓盤編號為左2放在上面,移動過程為:
1,左1 從左到中
2,左2 從左到右
3,左1 從中到右
那麼當左邊有n個圓盤的時候步驟為:
1,左1—(n-1) 從左到中
2,左n 從左到右
3,左1—(n-1)從中到右
n個圓盤需要移動的步驟數推到過程:
1—(n-1)從左到中 和從中到右 所需的步數是一樣的即f(n-1)步
所以:總步數就是三個移動過程步數相加
f(n)=f(n-1)+1+f(n-1)
推理:
f(n)+1=2(f(n-1)+1)
且f(1) = 2 這是等比數列 用公式得:
f(n)=2^n - 1;
所以時間複雜度為o(2^n)
public
class hanoi
public
static
void
hanoi(int n)
}public
static
void
func(int n ,string from,string mid,string to)else
}}
漢諾塔問題(Hanoi塔)
1.將from柱最上面的movesum 1個圓盤移動到by柱 借助to柱 2.將from柱上剩下的那1個圓盤直接移動到to柱 3.將by柱上的movesum 1個圓盤移動到to柱 借助from柱 int sumofplates 4 總的盤子數目 int sum 3 初始時各柱子上盤子數目 enum ...
漢諾塔問題 Hanoi
描述 一 漢諾塔問題 問 如何移?最少要移動多少次?漢諾塔示意圖如下 三個盤的移動 二 故事由來 法國數學家愛德華 盧卡斯曾編寫過乙個印度的古老傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片...
漢諾塔問題 hanoi(遞迴)
漢諾塔問題 hanoi 現有abc三個柱子,a中有n個盤 上小下大 移動到c上,要求全程上小下大 演算法 遞迴,把1 n 1個盤當作乙個整體 include 函式宣告 函式功能 把n個盤 從a 借助b,移到c hanoi int n,char x,char y,char z 函式功能 把乙個盤子x ...