舉例:
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)
8
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’ 越過
-
-
- 執行
else:
- 執行 ‘行5’,將
((n-1), a, c, b)
代入(2, a='A', b='C', c='B')
,得出參數為(1, 'A', 'B', 'C')
,繼續執行 ‘行2 - 3’,n == 1
返回輸出:(a, "->", c)
代入(1, 'A', 'B', 'C')
,即A -> C
- 回到 ’ 行5‘,繼續執行 ‘行6’ ,將
(a, "->", c)
代入nove函數(2, a='A', b='C', c='B')
並輸出,即A -> B
- 執行 ’行7‘,將
( (n-1), b, a, c)
代入(2, a='A', b='C', c='B')
得出參數為(1, 'C', 'A', 'B')
,繼續執行 ‘行2 - 3’,n == 1
返回輸出:(a, "->", c)
代入(1, 'C', 'A', 'B')
,即C -> B
- 執行 ‘行5’,將
- 執行
-
-
第三步 執行 ‘行6’
print(a, "->", c)
: (a, "->", c)
代入nove函數(3, a='A', b='B', c='C')
並輸出,即A -> C
-
第四步 執行 ’行7‘
nove((n-1), b, 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')
】- 執行 ‘行2 - 3’ ,
n != 1
, ‘行2 - 3’ 越過- 執行
else:
- 執行 ‘行5’,將
((n-1), a, c, b)
代入(2, a='B', b='A', c='C')
得出參數為(1, 'B', 'C', 'A')
,繼續執行‘行2 - 3’,n == 1
返回輸出:(a, "->", c)
代入(1, 'B', 'C', 'A')
,即B -> A
- 回到 ’ 行5‘,繼續執行 ‘行6’ ,將
(a, "->", c)
代入nove函數(2, a='B', b='A', c='C')
並輸出,即B -> C
- 執行 ’行7‘,將
((n-1), b, a, c)
代入(2, a='B', b='A', c='C')
得出參數為(1, 'A', 'B', 'C')
,繼續執行 ‘行2 - 3’,n == 1
返回輸出:(a, "->", c)
代入(1, 'A', 'B', 'C')
,即A -> C
-
代碼運行結束,輸出結果為:
A -> C A -> B C -> B A -> C B -> A B -> C A -> C
- 執行 ‘行5’,將
- 執行
- 執行 ‘行2 - 3’ ,