#created by: chen da
"""階乘函式就是典型的遞迴:
def fact(n):
if n == 0:
return 1
else:
return n * fact(n-1)
遞迴的特點:
遞迴必須包含乙個基本的出口(base case),否則就會無限遞迴,最終導致棧溢位。比如這裡就是n==0時返回1.
遞迴必須包含乙個可以分解的問題(recursive case)。想求得fact(n),就要用n*fact(n-1)。
遞迴必須要向著遞迴出口靠近(toward the base case)。這裡每次遞迴呼叫都會n-1,向著遞迴出口n==0靠近。
"""'''
#倒序列印
def print_new(n):
if n > 0:
print(n)
print_new(n - 1) #尾遞迴
print_new(10)
'''#匯入內建雙端佇列
from collections import deque
#計算機中是用棧來實現遞迴
#定義乙個棧
class stack(object):
def __init__(self):
self._deque = deque()
def push(self,value):
def pop(self):
return self._deque.pop()
def is_empty(self):
return len(self._deque) == 0
def print_stack(n):
s = stack()
while n > 0: #n不為0時持續入棧
s.push(n)
n -= 1
while not s.is_empty(): #s不為空時,後進先出
print(s.pop())
print_stack(10)
資料結構與演算法 遞迴
一 概念 遞迴是一種高效 簡介的編碼技巧,一種應用很廣泛的演算法,比如dfs深度優先搜尋,前中後序二叉樹遍歷等都是使用遞迴。方法或函式呼叫自身的方式成為遞迴呼叫,呼叫稱為遞,返回成為歸 所有遞迴問題都可以用遞迴公式來表示 二 遞迴優缺點 優點 簡潔 缺點 堆疊溢位風險 可根據調整遞迴呼叫的最大深度來...
資料結構與演算法 認識遞迴
淺識 1 遞迴與迴圈 理論上,任何迴圈都可以重寫為遞迴形式 有些語言沒有迴圈語句,只能使用遞迴。2 迴圈改遞迴 1 發現邏輯 相似性 2 一定要有 出口 不然就會死迴圈 3 構造相似性 如果沒有明顯的相似性,可能是缺少引數,需要主動構造,與遞推類似 4 遞迴呼叫 1 遞迴呼叫僅僅是被調函式正好是主調...
資料結構與演算法 10 遞迴
深入理解遞迴 舉個假想的例子 咱來到cba上海隊球館看一場激烈的常規賽,賽場座位都坐滿了,這時候女朋友 老婆大人問你我們現在坐的是第幾排?人這麼多,個子矮,看不清咋辦?遞迴派上用場了 問前面的朋友他是第幾排?在他的排數上 1 就知道自己的排數了。那前面的朋友一臉萌比也不知道怎麼辦呢?沒事,告訴他讓他...