国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

淺析python遞歸函數和河內塔問題

2020-02-23 04:35:06
字體:
來源:轉載
供稿:網友

關于遞歸函數:

  函數內部調用自身的函數。

以n階乘為例:

  f(n) = n ! = 1 x 2 x 3 x 4 x...x(n-1)x(n) = n x (n-1) !

def factorial(n):   if n==1:     return 1   return n * f(n-1)

//調用過程如下:

>>f(5)>>5 * f(4)>>5 * 4 * f(3)>>5 * 4 * 3 * f(2)>>5 * 4 * 3 * 2 * f(1)>>5 * 4 * 3 * 2 * 1>>120

從上面的例子可以直觀得看到遞歸函數在不斷的調用自己的函數,直到n==1(函數出口)。

關于河內塔:

規則:

  1. 三根柱子,A,B, C

  2. A 柱子上的盤子從小到大 排列,最上面的是最小的,最下面的是最大的。

  3. 將A上的盤子移動到C上,移動過程中始終保持,最大的在下面,最小的在上面。

假設 A 柱子上有一個盤子,可以直接從A移動到C完成:

  A --> C

假設 A 柱子上有兩個盤子,需要借助B,移動到C:

A --> B

A --> C

B --> C

將A 最上面的盤(2-1)移動到B,然后將A中剩下一塊盤移動到C,最后將B中的盤移動到C

假設 A 柱子上有三個盤子,需要借助B移動A 上面的兩個盤,然后將A剩下最大的盤移動到C,最后將B中的盤移動到C。

A --> C

A --> B

C --> B  //這三步將A上前兩個盤子移動到B

A --> C //這一步將A上最大的盤子移動到C

B --> A

B --> C

A --> C //后面這三步將B上的盤子移動到C

原理是將 A 上的(n-1) 塊盤移動到B,然后A中剩下的,也是最大的一塊盤移動到C,最后將B上(n-1)塊盤移動到C。

def Hanoi(n , a, b, c):  if n==1:    print (" Hanoi Tower move", a, "-->", c)    return  Hanoi(n-1, a, c, b)  Hanoi(1, a, b, c)  Hanoi(n-1, b, a, c)print (" When there is 1 ring on A")Hanoi(1, 'A', 'B', 'C')print (" When there are 2 rings on A")Hanoi(2, 'A', 'B', 'C')print (" When there are 3 rings on A")Hanoi(3, 'A', 'B', 'C')print(" When there are 4 rings on A")Hanoi(4, 'A', 'B', 'C')

以上所述是小編給大家介紹的python遞歸函數和河內塔問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林站長站網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潼关县| 清水河县| 英德市| 荣成市| 垫江县| 新乡市| 若尔盖县| 赣州市| 屏东市| 保亭| 永川市| 鄯善县| 木兰县| 虎林市| 外汇| 玉溪市| 金寨县| 新营市| 咸宁市| 涞源县| 南木林县| 高雄县| 赞皇县| 涡阳县| 佛坪县| 沙田区| 靖江市| 沂南县| 广宁县| 丹棱县| 拉萨市| 固原市| 福鼎市| 淮安市| 襄垣县| 赤水市| 贡嘎县| 孙吴县| 庄河市| 永修县| 偏关县|