【蓝桥杯每日一练】 汉诺塔
目錄
1.說明
2.解法
3.python實現
python全局變量使用方式:
python全局變量和局部變量的區別:
1.說明
????????河內之塔(Towers of Hanoi)是法國人M.Claus(Lucas)于1883年從泰國帶至法國的,河內為越戰時北越的首都,即現在的胡志明市;1883年法國數學家 Edouard Lucas曾提及這個故事,據說創世紀時Benares有一座波羅教塔,是由三支鉆石棒(Pag)所支撐,開始時神在第一根棒上放置64個由上至下依由小至大排列的金盤(Disc),并命令僧侶將所有的金盤從第一根石棒移至第三根石棒,且搬運過程中遵守大盤子在小盤子之下的原則,若每日僅搬一個盤子,則當盤子全數搬運完畢之時,此塔將毀損,而也就是世界末日來臨之時。
2.解法
設:A.B.C分別表示三根柱子;1,2,3分別表示三個圓盤,并且數字越大表示圓盤越大。
現在我們需要將A上的全部圓盤移動到C上
① 只有一個圓盤:1;A -> C
② 有兩個圓盤:1、2;A-> B??A -> C??B-> C
③ 有三個圓盤:1、2、3;A-> C? A-> B? C-> B??A -> C??B-> A? B-> C? A-> C
觀察上面的結果發現:每次最重要的一步,就是將A中最大的圓盤移動到C上。
①將1:A->C
②將2:A->C
③將3:A->C
觀察③:加粗A->C以上部分和以下的部分,我們可以發現其實過程和②完全相似。對于上面的部分:是將1.2兩個圓盤從起點A移動到終點B;對于下面的部分:是將1.2兩個圓盤從起點B移動到終點C(對于②:是將1.2兩個圓盤從A移動到C)。因此③中的過程,完全可以重復②的過程實現。
3.python實現
#1 漢諾塔 def move(n, a, b, c):if n==1:print (a,'-->',c)returnelse:move(n-1,a,c,b) #首先需要把 (N-1) 個圓盤移動到 bmove(1,a,b,c) #將a的最后一個圓盤移動到cmove(n-1,b,a,c) #再將b的(N-1)個圓盤移動到cmove(3, 'A', 'B', 'C')返回:
?這樣看是不是還不夠清楚,我覺得加一個總移動次數就更完美了
count = 0 def move(n, a, b, c):global countif n==1:print (a,'-->',c)count = count + 1returnelse:move(n-1,a,c,b) #首先需要把 (N-1) 個圓盤移動到 bmove(1,a,b,c) #將a的最后一個圓盤移動到cmove(n-1,b,a,c) #再將b的(N-1)個圓盤移動到cmove(3, 'A', 'B', 'C') print('總移動次數為',count)返回:
但是,在這里,得定義次數 count 為全局變量才可以哦!!!
python全局變量使用方式:
第一種:是在一個單獨的模塊中定義好,然后在需要使用的全局模塊中將定義的全局變量模塊導入。
第二種:直接在當前的模塊中定義好,然后直接在本模塊中通過global聲明,然后使用。
python全局變量和局部變量的區別:
對于作用域,全局變量在整個py文件中聲明,全局范圍內可以使用。
局部變量是在某個函數內部聲明的,只能在函數內部使用,如果超出使用范圍,則會報錯。
在函數內部,如果局部變量與全局變量變量名一樣,則優先調用局部變量。
總結
以上是生活随笔為你收集整理的【蓝桥杯每日一练】 汉诺塔的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 没有bug队——加贝——Python 5
- 下一篇: python实例 69,70