(文章大部分內容摘抄自 結城浩–程式設計師的數學)
很推薦大家閱讀此本書,作者對程式設計師涉及的數學知識的觀點非常新穎,而且上面的知識對初學程式的大家非常好消化**從一般性前提推出個別性結論的是遞迴.從個別前提推出一般性結論的是歸納的思想
遞迴的思維方式:將複雜問題轉換為較為簡單的同類問題
題目:有a,b,c三根細柱,a柱套著6個圓盤,這些圓盤大小各異,按從大到小的順序自下而上擺放
現在要把套在a柱上的6個圓盤全部移到b柱上.並且在移動圓盤時需要遵守下述規則:
一次只能移動柱子最上端的乙個圓盤
小圓盤上不能放大圓盤小圓盤上不能放大圓盤
將1個圓盤從一根柱子移到另一根柱子,算移動1次,那麼,將6個圓盤全部從a移到b最少需要移動幾次呢?
將1個圓盤從一根柱子移到另一根柱子,算移動1次,那麼,將6個圓盤全部從a移到b最少需要移動幾次呢?
將1個圓盤從一根柱子移到另一根柱子,算移動1次,那麼,將6個圓盤全部從a移到b最少需要移動幾次呢?
讓我們先從三個漢諾塔開始解決吧!
(大家可以先把圖蓋住,好好在頭腦裡思考下怎麼移動)
從圖中,我們發現:
'6層漢諾塔』可以通過以下步驟求出:
首先,將5個圓盤從a柱移到c柱(解出5層漢諾塔)
然後,將6個之中最大的圓盤從a柱移到b柱
最後,將5個圓盤從c柱移到b柱(解出5層漢諾塔)
『5層漢諾塔』,『3層漢諾塔』…也是同樣的解法,'1層漢諾塔』只要移動1次圓盤就ok啦
當n=0時,
不用做任何動作
當n>0時
首先,將n-1個圓盤從a柱,經由b柱中轉,移到c柱(解出n-1)層漢諾塔然後,將1個圓盤從a柱移到b柱
最後,將n-1盤從c柱,經由a柱中轉,移到b柱(解出n-1層漢諾塔)
解析式:使用n表示h(n)的式子
:param n: 1:小圓盤, 2:中圓盤, 3:大圓盤
:param src: 起始柱
:param dst: 終點柱
:param mid: 中轉柱
:return:
"""global count
if n ==1:
# 此時圓柱上只有最小的圓盤,每次遞迴到最深層,就只剩下最小圓盤沒有轉移
("{}:{}->{}"
.format(1
, src, dst)
) count +=
1else
: hanoi(n -
1, src, mid, dst)
# 用dst 作為中轉柱,將src柱 上的圓盤全部轉移到mid柱中
("{}:{}->{}"
.format
(n, src, dst)
) count +=
1 hanoi(n -
1, mid, dst, src)
# 用src 作為中轉柱, 將mid柱中的圓盤全部轉移到dst柱中
hanoi(3,
'a',
'c',
'b')
(count)
1
:a->c
2:a-
>b
1:c-
>b
3:a-
>c
1:b-
>a
2:b-
>c
1:a-
>c
7
以下說明形參到實參哪些發生變化,實參到形參又有哪些發生變成1
. 實參 src:a dst:b形式引數中的mid> mid:c形式引數中的dst>
2. 實參 src:a mid:b形式引數中的dst> dst:c形式引數中的mid>
3. 實參 src:a dst:c mid:b
備註:微雲檔名為:hanoi呼叫過程詳解
python_遞迴_結合 程式設計師的數學 食用更佳
程式設計師的數學
封面 內容簡介 如果數學不好,是否可以成為一名程式設計師呢?答案是肯定的。本書最適合 數學糟糕但又想學習程式設計的你。沒有晦澀的公式,只有好玩的數學題。幫你掌握程式設計所需的 數學思維 日文版已重印14次!程式設計的基礎是電腦科學,而電腦科學的基礎是數學。因此,學習數學有助於鞏固程式設計的基礎,寫出...
程式設計師的數學
0 明確表現可 無即是有 換言之,就是不對 無 進行特別處理。引入 0 以後,更容易簡化規則。如果找出具有一致性的簡單的規則,則便於機械式處理,讓計算機來解決問題。邏輯基本上被分為 true 和 false 兩個世界。解決問題時,並不是眉毛鬍子一起抓,而應該根據某條件分為 條件成立 和 條件不成立 ...
程式設計師的數學 目錄
貌似是2013還是哪年,不記得了,在程式設計師的世界颳起一陣數學風,數學之美啥的,當時也想看看關於數學的書,感覺大學的數學知識似乎還給老師了,可能需要看看初級一點的數學書,搜尋了一下書評,就找了這本。當時隨便翻翻,也就放下了,需要學習的東西很多,而時間總是不夠。到了2015年末,找出個週末看了下這本...