程式設計師的數學 遞迴介紹 python

2021-09-02 13:06:29 字數 2876 閱讀 7019

(文章大部分內容摘抄自 結城浩–程式設計師的數學)

很推薦大家閱讀此本書,作者對程式設計師涉及的數學知識的觀點非常新穎,而且上面的知識對初學程式的大家非常好消化

從一般性前提推出個別性結論的是遞迴.從個別前提推出一般性結論的是歸納的思想

遞迴的思維方式:將複雜問題轉換為較為簡單的同類問題

**

題目:有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:

# 此時圓柱上只有最小的圓盤,每次遞迴到最深層,就只剩下最小圓盤沒有轉移

print

("{}:{}->{}"

.format(1

, src, dst)

) count +=

1else

: hanoi(n -

1, src, mid, dst)

# 用dst 作為中轉柱,將src柱 上的圓盤全部轉移到mid柱中

print

("{}:{}->{}"

.format

(n, src, dst)

) count +=

1 hanoi(n -

1, mid, dst, src)

# 用src 作為中轉柱, 將mid柱中的圓盤全部轉移到dst柱中

hanoi(3,

'a',

'c',

'b')

print

(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年末,找出個週末看了下這本...