一、什麼是遞歸
如果函數包含了對其自身的調用,該函數就是遞歸的。遞歸做為一種演算法在程式設計語言中廣泛應用,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需的多次重複計算,大大減少了程式的程式碼量。例如,要計算1-9的9位數的乘積,直覺的演算法是1*2*3*4*5*6*7*8*9,如果要計算1-10000的乘積,直覺的演算法就難於實作出,而遞歸就可以很簡單的實作。請看範例:
def fact(n):#计算给定数字到一的乘积 if n<=1: return 1 else: return n * fact(n-1) print (fact(7))
結果是:5040
下面我們用範例來看看遞迴的執行過程:
def calc(n): print(n) if n/2 > 1: res = calc(n/2) return n calc(8)
結果為:
8 4.0 2.0
再看這一個範例:
def calc(n): print(n) if n/2 > 1: res = calc(n/2) print('res:',res) print("N:",n) return n calc(8)
#結果為:
8 4.0 2.0 N: 2.0 res: 2.0 N: 4.0 res: 4.0 N: 8
二、生成器
#生成器是一個帶有yield 語句的函數。一個函數或子 程式只回傳一次,但一個生成器能暫停執行並傳回一個中間的結果,返 回一個值給呼叫者並暫停執行。當生成器的next()方法被呼叫的時候,它會準確地從離開地方繼續
下面看範例:
def func(): print('11111111') yield [1] print(2222222222) yield 2 print(3333333333) yield 3 ret=func() r1=ret.__next__() print(r1) r2=ret.__next__() print(r2) r3=ret.__next__() print(r3)
結果為:
11111111 [1] 2222222222 2 3333333333 3
由於python 的for 迴圈有next()呼叫和對StopIteration 的處理, 使用一個for 迴圈而非手動迭代穿過一個生成器(或那種事物的迭代器)總是要簡潔漂亮得多。例:
def func(): print('11111111') yield [1] print(2222222222) yield 2 print(3333333333) yield 3 ret=func() for i in ret: print(i)
結果與前面相同。
這些簡單的範例應該會讓你有點明白生成器是如何運作的。除了next()來獲得下個產生的值,使用者可以將值回送給生成器[send()],在生成器中拋出異常,並且要求生成器退出[close()]
下面是一個展示了這些特性的,簡單的範例。
def counter(start_at=0): count = start_at while True: val = (yield count) if val is not None: count = val else: count += 1
產生器帶有一個初始化的值,對每次對生成器[next()]呼叫以 1 累加計數。使用者已可以選擇重 置這個值,如果他們非常想要用新的值來呼叫 send()不是呼叫 next()。這個生成器是永遠運作的,所以如果你想要終結它,呼叫 close()方法。如果我們互動的運行這段程式碼,會得到以下輸出:
>>> count = counter(5) >>> count.next() 5 >>> count.next() 6 >>> count.send(9) 9 >>> count.next() 10 >>> count.close() >>> count.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
以上這篇深入理解python函數遞迴與產生器就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持PHP中文網。
更多python函數遞歸和生成器相關文章請關注PHP中文網!

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于Seaborn的相关问题,包括了数据可视化处理的散点图、折线图、条形图等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于进程池与进程锁的相关问题,包括进程池的创建模块,进程池函数等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于简历筛选的相关问题,包括了定义 ReadDoc 类用以读取 word 文件以及定义 search_word 函数用以筛选的相关内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于数据类型之字符串、数字的相关问题,下面一起来看一下,希望对大家有帮助。

VS Code的确是一款非常热门、有强大用户基础的一款开发工具。本文给大家介绍一下10款高效、好用的插件,能够让原本单薄的VS Code如虎添翼,开发效率顿时提升到一个新的阶段。

本篇文章给大家带来了关于Python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

pythn的中文意思是巨蟒、蟒蛇。1989年圣诞节期间,Guido van Rossum在家闲的没事干,为了跟朋友庆祝圣诞节,决定发明一种全新的脚本语言。他很喜欢一个肥皂剧叫Monty Python,所以便把这门语言叫做python。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

記事本++7.3.1
好用且免費的程式碼編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中