遞迴的理解和例子
阿新 • • 發佈:2018-11-08
''' # 遞迴函式 - 優點: _直接簡潔 -缺點: _對遞迴有限制超過報錯(100層)[設定遞迴最大層數 import sys sys.setrecursionlimit(設定遞迴的頂層)] _消耗資源大 ''' # 一個簡單的遞迴 ''' X = 0 def fun(): """ * 要想好什麼時候結束 此例列舉的則是無限呼叫遞迴直至超過限制 """ global X X += 1 print(X) fun() fun() ''' #斐波那契額數列 #第一個數字是一,第二個數字也是一,從第三個開始,每一個數字等於前倆個數字相加的和#公式為:f(1)=1,f(2)=1,f(n)=f(n-1)+f(n-2) 例如:1,1,2,3,5,8,13.... def fib(N): if N == 1: return 1 if N < 1: return 1 return fib(N-1)+fib(N-2) print(fib) ''' #一個階乘 def fun(n): if n < 1: return 1 elif n == 1: return 1 else: return n * fun(n-1)result = int(input('請輸入一個數:')) resopen = fun(result) print('%d的階乘是:%d'% (result,resopen)) ''' #漢諾塔 """ X - 63 Y - 0 Z - 0 問題一:將X柱子上的62個盤子藉助Z移動到Y上 問題二:將Y柱子上的62個盤子藉助X移動到Z上 """ #M代表多少個盤子 X,Y,Z,分別代表柱子 def hnt(M,X,Y,Z): if M < 1: #非負數 return 1 elif M == 1: #如果留一個盤子將它移動到Z柱子上print(X,' --> ',Z) else: hnt(M-1,X,Z,Y) #將除了最後一個盤子從X移動到Y上(M-1) print(X,' --> ',Z) hnt(M-1,Y,X,Z) M = int(input('請輸入層數:')) hnt(M,'X','Y','Z')