python递归面试题_汉诺塔问题其实很简单 Python 递归经典面试题
話(huà)不多說(shuō),上代碼
1 def hanoi_move(n, source, dest, intermediate):
2 if n >= 1: # 遞歸出口,只剩一個(gè)盤(pán)子
3 hanoi_move(n-1, source, intermediate, dest)
4 print("Move %s -> %s" % (source, dest))
5 hanoi_move(n-1, intermediate, dest, source)
首先我們這里有三根桿子依次排放,分別是 源桿、媒介桿、目標(biāo)桿 對(duì)應(yīng) 代碼的 source、dest、intermediate,源桿上有n塊大餅
我們定義一個(gè)函數(shù) def hanoi(n,源桿,目標(biāo)桿,媒介桿):# 意思是源桿 借助 媒介桿 到 目標(biāo)桿
我們假設(shè)除了底下最后一層上面的n-1層都已經(jīng)擺放好了,即源桿上目前只有兩塊大餅,我們要執(zhí)行的操作是:
源桿上的n-1層 借助 目標(biāo)桿 到 媒介桿 等同于 hanoi(n-1,源桿,媒介桿,目標(biāo)桿)相當(dāng)于n-1層在媒介桿上了
打印 源桿 到 目標(biāo)桿 顯示路徑
再把媒介桿的n-1層 借助 源桿 到 目標(biāo)桿 等同于 hanoi(n-1,媒介桿,目標(biāo)桿,源桿)
再來(lái)說(shuō)說(shuō)為什么假設(shè)n-1層的,因?yàn)槲覀冊(cè)诩僭O(shè)n-1層的時(shí)候使用了遞歸,在hanoi(n-1…)的時(shí)候我們就是假設(shè)n-2層已經(jīng)擺放好了,然后就是在hanoi(n-2…)的時(shí)候我們假設(shè)n-3層已經(jīng)擺放好了,不斷回溯,就到了最上面一層已經(jīng)擺放好了,這個(gè)假設(shè)是合理的,既可以使用該方法。使用了遞歸的回溯思想,如果使用遞歸思想不斷地推出他的步驟那基本是不可能的,然而通過(guò)前提不斷地假設(shè)反而更容易拿到結(jié)果。
總結(jié)
以上是生活随笔為你收集整理的python递归面试题_汉诺塔问题其实很简单 Python 递归经典面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JAVA的三大框架是什么?
- 下一篇: CommonJs、AMD、CMD模块化规