漢諾塔遊戲規則:遊戲裡有三根金剛石柱子,在a柱子上從下往上安從大到小順序摞著64片**圓盤。玩家需要做的是把圓盤從下面開始按大小順序重新擺放在c柱子上,利用b柱子作為過渡。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。
遊戲理解起來很簡單,我們小時候應該都玩過,那麼怎麼用程式來模擬這一過程呢?在這裡,我們可以用遞迴思想,問題將很容易得到解決。那麼什麼是遞迴思想,遞迴又應該如何使用呢?下面我將參照嵩天老師的遞迴函式課程來做一次粗略的介紹與總結。
一、什麼是遞迴?
遞迴就是在函式內部呼叫自身。
二、遞迴的基本條件
1.函式+分支結構
舉例:
def
func
(n):if:
***else
: ***
# -*- coding: utf-8 -*-
count =
0def
hanoi
(n,src,dst,mid)
:"""漢諾塔函式,將n個圓盤從源柱子通過中間柱子最後都搬去目的柱子"""
global count
if n ==1:
print
("{}:{}->{}"
.format
(n,src,dst)
)#將1個圓盤從源柱子拿到目的柱子去
count +=
1#完成一次搬運,計數+1
else
: hanoi(n-
1,src,mid,dst)
#將n-1個柱子從源柱子通過目的柱子的過渡,全部搬到中間柱子
print
("{}:{}->{}"
.format
(n,src,dst)
)#列印將第n個圓盤從源柱子拿到目的柱子
count +=
1 hanoi(n-
1,mid,dst,src)
#最後將n-1個柱子從源柱子通過中間柱子的過渡,全部搬到目的柱子
hanoi(5,
"a",
"b",
"c")
print
(count)
Python遞迴之漢諾塔
漢諾塔一般有兩種返回結果,一種是計算移動的次數,另一種是列印輸入移動的步驟。假設有a,b,c三個柱子,初始時盤子都在a柱子上,需要借助b做中轉站把所有盤子都移動到c上。1.計算移動的次數 首先定義乙個函式hantower n 用來計算移動的次數。如果n 1,直接從a移動到c,返回結果1 如果n 1,...
遞迴之 漢諾塔
遞迴思想的概念 即將乙個複雜問題分解成一系列小的問題,並且這些小問題都具有相同的情形。此時可運用遞迴的思想來解決更易於理解 但並不一定是效率最高的哦 遞迴演算法有三個關鍵點 1 了解題意是否適用遞迴來解決 2 有明確的終止條件 通常是分解出來的一系列小問題裡最簡單的那種情況 3 隨著遞迴演算法的演進...
遞迴之漢諾塔
漢諾塔 time limit 1000 ms memory limit 65536 kib submit statistic problem description 漢諾塔 又稱河內塔 問題是印度的乙個古老的傳說。開天闢地的神勃拉瑪在乙個廟裡留下了三根金剛石的棒a b和c,a上面套著n個圓的金片,最...