国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python進階之尾遞歸的用法實例

Python進階之尾遞歸的用法實例

2021-01-10 00:51Handsome_Owen Python

本篇文章主要介紹了Python進階之尾遞歸的用法實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

作者是一名沉迷于Python無法自拔的蛇友,為提高水平,把Python的重點和有趣的實例發(fā)在簡書上。

尾遞歸

如果一個函數(shù)中所有遞歸形式的調用都出現(xiàn)在函數(shù)的末尾,我們稱這個遞歸函數(shù)是尾遞歸的。當遞歸調用是整個函數(shù)體中最后執(zhí)行的語句且它的返回值不屬于表達式的一部分時,這個遞歸調用就是尾遞歸。尾遞歸函數(shù)的特點是在回歸過程中不用做任何操作,這個特性很重要,因為大多數(shù)現(xiàn)代的編譯器會利用這種特點自動生成優(yōu)化的代碼。

(來源于不說人話的某度)

下面是筆者的個人理解:把計算出的值存在函數(shù)內部(當然不止尾遞歸)是其計算方法,從而不用在棧中去創(chuàng)建一個新的,這樣就大大節(jié)省了空間。函數(shù)調用中最后返回的結果是單純的遞歸函數(shù)調用(或返回結果)就是尾遞歸。

實例

實例還是和筆者的上一篇文章相同,建議讀者閱讀 Python —— 遞歸

1、階乘

常規(guī)遞歸階乘:

?
1
2
3
4
def factorial(n):
  if n == 0:
    return 1
  return factorial(n - 1) * n

我們來看一下執(zhí)行過程:

factorial(4) 
factorial(3) * 4 
factorial(2) * 3 * 4 
factorial(1) * 2 * 3 * 4 
factorial(0) * 1 * 2 * 3 * 4 
1 * 1 * 2 * 3 * 4 
1 * 2 * 3 * 4 
2 * 3 * 4 
6 * 4 
24

但是如果把上面的函數(shù)寫成如下形式:

?
1
2
3
4
def factorial(n, acc=1):
  if n == 0:
    return acc
  return factorial(n - 1, n * acc)

我們再看下執(zhí)行過程:

factorial(4, 1) 
factorial(3, 4) 
factorial(2, 12) 
factorial(1, 24) 
factorial(0, 24) 
24

很直觀的就可以看出,這次的 factorial 函數(shù)在遞歸調用的時候不會產生一系列逐漸增多的中間變量了,而是將狀態(tài)保存在 acc 這個變量中。而這種形式的遞歸,就叫做尾遞歸。

2、斐波那契數(shù)列

常規(guī)遞斐波那契數(shù)列:

?
1
2
3
4
5
def fib(n):
  if n < 2:
    return n
  else:
    return fib(n - 1) + fib(n - 2)

而尾遞歸:

?
1
2
3
4
5
def fib_tail(n, r, t):
  if n == 1:
    return r
  else:
    return fib_tail(n - 1, t, r + t)

一下子就充滿了逼格,還高效了許多,何樂而不為呢!

總結

可以看出,在每次遞歸調用的時候,都會產生一個臨時變量,導致進程內存占用量增大一些。這樣執(zhí)行一些遞歸層數(shù)比較深的代碼時,除了無謂的內存浪費,還有可能導致著名的堆棧溢出錯誤。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.jianshu.com/p/7b307cc0dc2d

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人在线激情网 | 精品入口麻豆88视频 | 国产精品日产欧美久久久久 | 欧美在线视频一区 | 色综合中文 | 97在线观看 | 午夜视频在线免费观看 | 免费看a| 狠狠躁躁夜夜躁波多野结依 | 亚洲国产激情 | 亚洲在线精品 | 欧美视频区 | 久久精品综合 | 日韩一区二区三区在线播放 | 亚洲视频1区 | 亚洲国产视频一区二区 | 午夜免费av | 欧美日韩精品电影 | 久草福利资源 | 小川阿佐美88av在线播放 | 色永久 | av在线中文播放 | 在线观看亚洲区 | 色老头综合网 | 日日夜夜精品免费视频 | 久青草视频 | 欧美一区二区三区在线观看视频 | 亚洲一区二区三区精品动漫 | 国产视频一区在线 | 夜夜草视频 | 中文字幕精品视频 | 狠狠草视频 | 91精品国产乱码久久久久久 | 成人影音 | 欧洲一区在线 | 国产一区二区精品在线观看 | 国产偷窥老熟盗摄视频 | 亚洲精品欧美 | 91在线视频观看 | 国产欧美日韩综合精品一区二区 | 国产日产久久高清欧美一区 |