11 資料結構與演算法 遞迴

2021-08-30 06:39:53 字數 1056 閱讀 3425

#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 就知道自己的排數了。那前面的朋友一臉萌比也不知道怎麼辦呢?沒事,告訴他讓他...