1. 程式人生 > >演算法 遞迴 線條件和遞迴條件 棧 呼叫棧 遞迴呼叫棧

演算法 遞迴 線條件和遞迴條件 棧 呼叫棧 遞迴呼叫棧

Sack Overflow:”如果使用迴圈效能可能更高;如果使用遞迴,程式更容易理解。如何選擇要看什麼對你來說最重要。“

一、遞迴函式必須有 基準條件遞迴條件
基準條件:負責到達一定條件結束迴圈
遞迴條件:負責遞迴迴圈

def record(i):
    print(i)
    if i <= 0:
        return   #基準條件,負責結束迴圈
    else:
        record(i-2)     #遞迴條件。負責迴圈
        
record(22)

運算結果:
在這裡插入圖片描述
二、呼叫棧
當A函式呼叫一個函式B時,當前函式A處於未完成狀態,當完成B函式的呼叫和運算,繼續函式A的任務。
#棧的呼叫

def hello(name):    #A函式
    print('hello' + name + '!')
    hello_too(name)     #B函式
    print('it time to say bye!')
    bye()       #C函式
    
def hello_too(name):        #B函式
    print('how are you ' + name + '?')
    
def bye():      #C函式
    print('ok bye!')

name = 'xiaoming'  
hello(name)

執行結果:
在這裡插入圖片描述

三、遞迴呼叫棧
我們做個階乘函式,用來做舉列子:

def jiechang(n):
    if n == 1:
        return 1    #此處return值為階乘函式的最後一步,不可或缺的1
    else:
        return n * jiechang(n-1)

jiechang(2)
jiechang(3)
jiechang(4)

執行結果:
在這裡插入圖片描述

四、總結
1、遞迴函式指的是呼叫自己的函式,遞迴函式有兩個條件:基線條件、遞迴條件。
2、棧的兩種操作:壓入彈出,所有函式的呼叫都進入呼叫棧