遞歸就是不斷調用自己,讓解決方案更清晰,但是沒有性能上的優勢。使用情景參考Stack Overflow的一個答案:“如果使用循環,程序的性能可能更高;如果使用遞歸,程序可能更容易理解。如何選擇要看什么對你來說更重要。”
基線條件和遞歸條件
def countdown(i): print(i) if i <= 0: # Base case return else: # Recursive case countdown(i - 1)
實例1:factorial
def max_num(list): if len(list) == 2: return list[0] if list[0] > list[1] else list[1] sub_max = max_num(list[1:]) return list[0] if list[0] > sub_max else sub_max print(max_num([1, 100, 22, 333, 31, 12]))
棧
假如你要寫一系列待辦事項的清單,每寫一個清單就把一個便條放在桌子上,當你開始讀取清單的時候,你從最上面的一張開始讀,並將其刪除。因此這個待辦事項清單只有兩種操作:壓入 (插入)和彈出(刪除並讀取)。這種數據結構稱為棧。
def green(name): print('hello,', name) greet2(name) print('getting ready to say bye......') bye() def greet2(name): print('how are you,', name) def bye(): print('ok bye') green('Maggie')
當調用green('edward')的時候,計算機將首先為該函數調用分配一塊內存。
使用這些內存的時候,變量name就被設置為edward並儲存到內存中。
執行完greet2后,回到greet函數繼續執行
首先打印getting ready to say bye…,再調用 函數bye。