舉例:
def nove(n,a,b,c):
if n == 1:
print(a,'------------>',c)
else:
nove(n-1,a,c,b)
nove(1,a,b,c)
nove(n-1,b,a,c)
執行輸出結果:
nove(3, 'a', 'b', 'c')
# a --> c# a --> b
# c --> b
# a --> c
# b --> a
# b --> c
# a --> c
執行過程詳解:
1 def nove(n, a='a', b='b', c='c'):
2 if n == 1:
3 return print(a, "->", c)
4 else:
5 nove((n-1), a, c, b)
6 print(a, "->", c)
7 nove((n-1), b, a, c)
9 nove(3)
第6行print(a, "->", c)
可以寫做nove(1, a, b, c)
,個人感覺可以不用這麼寫,print(a, "->", c)這樣可以讓**少跑兩步。
開始執行nove( 3 )
:
nove 函式代入 『 行9』 ( n = 3 )引數(3, a='a', b='b', c='c')
第一步執行 『行2 - 3』if n == 1:......
:
n != 1
, 『行2 - 3』越過
第二步執行 『行4』else:
:
執行 『行5』, 第一次遞迴開始,((n-1), a, c, b)
回到函式最初代入(3, a='a', b='b', c='c')
,得出引數為(2, 'a', 'c', 'b')
,【!注意: 此時『行1 』(3, a='a', b='b', c='c')
在 『行5』 遞迴回到函式最初執行後已改變為(2, a='a', b='c', c='b')
】
執行 『行2 - 3』 ,n != 1
, 『行2 - 3』 越過
(a, "->", c)
代入nove函式(3, a='a', b='b', c='c')
並輸出,即a -> c
執行 『 行7』 ,第二次遞迴開始,((n-1), b, a, c)
代入(3, a='a', b='b', c='c')
得出引數為(2, 'b', 'a', 'c')
【!注意: 此時 『行1 』(3, a='a', b='b', c='c')
在 『行7』 遞迴回到函式最初執行後已改變為(2, a='b', b='a', c='c')
】
遞迴的執行過程
1 if root null 4 int left maxdeepth root.left 5 int right maxdeepth root.right 6 return left right?left 1 right 1 這是求樹的深度。那麼程式執行到第四行時,會不會先將left的遞迴呼叫壓入...
函式的遞迴過程
函式的遞迴就是函式通過自己迴圈呼叫自己來完成某項功能,我們在自定義函式的時候也經常會用到遞迴功能,那麼當函式在進行遞迴的時候內部過程都有哪些呢?我們以這個程式為例 age int n else tmp age n 1 2 return tmp 函式的遞迴就是函式通過自己迴圈呼叫自己來完成某項功能,我...
遞迴的概念 函式遞迴過程
直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。使用遞迴技術往往會使 更簡潔,使演算法的描述更清晰且容易理解。例 1 階乘函式 階乘函式遞迴的定義為 當n 0時,n 1,這是這個函式的初始條件,是非遞迴定義的,是此遞迴函式的退出條件。這個遞迴函式在執行時,會不斷的呼...