漢諾塔演算法

2021-09-14 08:46:41 字數 994 閱讀 5697

漢諾塔問題描述:有a, b, c三個圓柱,其中a上從上至下放置了從小到大n個圓盤,一次只能移動乙個圓盤,且大的圓盤不能放在小圓盤之上,要求列印出從a將圓盤移到c的方案。

當n = 1時, a->c

當n = 2時, a->b, a->c, b->c

當n = 3時, [a->c, a->b, c->b,] a->c,[b->a, b->c, a->c]

當n = 4時, a->b, a->c, b->c, a->b, c->a, c->b, a->b,

a->c, 

b->c, b->a, c->a, b->c, a->b, a->c, b->c

當n = 5時, a->c, a->b, c->b, a->c, b->a, b->c, a->c,

a->b, 

c->b, c->a, b->a, c->b, a->c, a->b, c->b

a->c,

b->a, b->c, a->c, b->a, c->b, c->a, b->a,

b->c,

a->c, a->b, c->b, a->c, b->a, b->c, a->c

當n > 2時,第n項,[a->b],a->c,[b->c]

第n-1項,a->b  [a->c],a->b,[c->b]    b->c [b->a],b->c,[a->c]

第n-1-1項,

第n-1項,a->c(此處的c應該是b),a->c,和第n-1-1項,a->b(此處的b應是c),b->c

……如此重複,可以用遞迴求得結果

由此,不難看出,計算n個圓盤,所需要的次數為f(n) = 2*f(n-1)+1

**:

const move=(a,c)=>->$`)

}const hanoi = (n,a,b,c)=>else

}

參考:從fibonacci和漢諾塔看分治法

漢諾塔演算法

最簡步驟 2的n次冪 1 為了實現 n個盤從 借助c 從a 移動到 b 思路如下 首先考慮極限當只有乙個盤的時候 只要 盤直接從 a b即可 那麼當有2個盤的時候就只要先把1號盤從a c 然後 把2號盤 a b 再 把 2好盤從 c b 那麼當有n個盤的時候你只要先把 n 1個 盤 借助 b 移動到...

漢諾塔演算法

解法 如果柱子標為abc,要由a搬至c,在只有乙個盤子時,就將它直接搬至c,當有兩個盤子,就將b當作輔助柱。如果 盤數超過兩個,將第三個以下的盤子遮起來,就很簡單了,每次處理兩個盤子,也就是 a b,a c,b c這三個 步驟,而被遮住的部分,其實就是進入程式的遞迴處理。事實上,若有n個盤子,則先移...

漢諾塔演算法

乙個印度傳說 在乙個神廟裡有有乙個漢諾塔,就是乙個銅板上插著3個寶石針,其中一根針從上到下的穿著由小到大的銅片64片,僧人們一次只能移動乙個銅片,並且不論移到哪個針上,必須保持小片在大片上面。僧侶們預言,當所有的銅片都從穿好的那根針上移到另外一根針上時,世界就將在一聲霹靂中消亡。當然,這只是個傳說,...