如何深入理解遞歸解漢諾塔?
遞歸核心代碼如下
def move(n, a, b, c):
? ?if n ==1:
? ? ? ?print a, '-->', c
? ? ? ?return
? ?move(n-1, a, c, b) ? ?①
? ?print a, '-->', c
? ?move(n-1, b, a, c) ? ?②
稍微懂一點遞歸,這段代碼看也勉強能看懂,自己慢慢順著推了一遍覺得這個遞歸設計得很神奇。只是想知道在設計的時候,在不知道這個答案的時候,①和②這兩個遞歸是這么設計出來的?就是遞歸的形參順序,為什么可以這么設計。
另外比較好奇深入理解“遞歸”的人在碰到類似的問題的時候,是靠自己的深入理解來分析題目,得出解答,還是依靠記憶得到代碼模板,再根據題目自己“試”出正解?
2017-10-20
首先在思考的時候你有假設了有a盤有N個圓餅,當然前提在于這個擺放一定是上面小下面大的方式。1的函數是先把除了底盤以外的圓盤借助c先到達b,此時a上還有一個底盤,print a,'->',c,直接將底盤放到C上,然后代碼2就是再借助a將剛才放在b的圓盤運往c。遞歸設計在運用以前學過的數列之中是非常好的,他可以自己幫你推演公式,你只需要寫幾行代碼就行。這個題目在于定義函數和分情況討論,
2018-08-25
表示沒看懂
2017-10-20
我想問一下 為什么if n==1:中最后一行為什么有個return如果沒有return 為啥會超時?