2018年11月23日 星期五

python - 遞歸函數 遞迴函式

遞歸函數
.說明遞歸:  在函數中調用自身函數
     *最大遞歸次數默認是 997/998次
     *為python從內存角度出發作的限制
     *可使用 setrecursionlimit() 來修改限制上限,但會依照內存停止
   *如果遞歸次數太多,不是適合使用遞歸來解決問題
   *遞歸的缺點: 佔內存
   *遞歸的優點: 會讓代碼變簡單

.算法 --二分查找算法
.三級菜單  

*執行可以修改遞歸上限

import sys
sys.setrecursionlimit(900000000) #修改上限
n = 0
def story():
    global  n
    n += 1    print(n)
    story()

story()




遞歸舉例: 
趙雲  今年幾歲?                                 
趙雲  比 魏延 大兩歲   
魏延  今年幾歲??                            
魏延  比黃蓋   大兩歲
黃蓋  今年幾歲?                                 
黃蓋  比  劉備  大兩歲
劉備  今年幾歲??
劉備  40了              

趙雲  今年幾歲?          n = 1 age(1) = age(2)+2 = age(n+1) + 2
趙雲  比 魏延 大兩歲
魏延  今年幾歲??        n = 2 age(2) = age(3) + 2 = age(n+1) +2
魏延  比黃蓋   大兩歲
黃蓋  今年幾歲?          n = 3 age(3) = age(4) + 2 = age(n+1) +2
黃蓋  比  劉備  大兩歲
劉備  今年幾歲??
劉備  40了               n = 4 age(4) = 40
n = 4 age(4) = 40
n < 4 age(n) = age(n+1) +2
.寫成函數
def age(n) :
    if n == 4:
        return  40    elif n > 0 and n < 4 :
        return age(n+1) + 2print(age(1))
運行結果:
46
.拆解看
def age(1):
    if 1 == 4:
        return 40    elif 1 > 0 and 1 < 4:
        return 46
def age(2):
    if 2 == 4:
        return 40    elif 2 >0 and 2 < 4:
        age(3) + 2    None +2
def age(3):
    if 3 == 4:
        return 40    elif 3 >0 and 3 < 4:
        42
def age(4):
    if 4 == 4:
        return 40    elif n >0 and n < 4:















沒有留言:

張貼留言