1. 程式人生 > >遞迴的理解和例子

遞迴的理解和例子

'''
# 遞迴函式

- 優點:
    _直接簡潔

-缺點:
    _對遞迴有限制超過報錯(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')