Python遞歸函數(shù)

<b>簡單的來定義下這個(gè)遞歸函數(shù)渊涝,通俗點(diǎn)講就是一個(gè)函數(shù)在內(nèi)部調(diào)用自身慎璧,這個(gè)函數(shù)就是遞歸函數(shù)。
bb is cheap , show me the code .

個(gè)人學(xué)習(xí)理論跨释,先定義在code在bb

來用一段代碼以及剖析運(yùn)行過程胸私,來理解python遞歸函數(shù)。
比如我們要實(shí)現(xiàn)一個(gè)計(jì)算的函數(shù)鳖谈,就比如說岁疼,定義參數(shù)為10,那么這個(gè)函數(shù)就要負(fù)責(zé)計(jì)算
10 * 9 * 8 ………… * 3 * 2 * 1 的結(jié)果缆娃。

先用常規(guī)方法:

#!/usr/bin/env python
#auther:Lewis
sum1 =1
for i in range(1,101):
    sum1 = i*sum1
print(sum1)

簡述常規(guī)方法運(yùn)行過程:

sum = 1
進(jìn)入for 循環(huán)捷绒,迭代1----100的之間的數(shù)
for i in range:
i = 1
i = 2
i = 3
i = 4
i = 5
...
i = 100
每一個(gè)臨時(shí)變量i都是一個(gè)新的值。
sum1 = sum1 * i 這樣寫是為了清楚運(yùn)算邏輯贯要,更簡便的寫法是
sum1 *= i
每一次sum1 * i 的結(jié)果都會(huì)存到全局變量sum1里面
(根據(jù)for循環(huán)暖侨,全局變量的值 是不斷變化的)
循環(huán)結(jié)束,按順序打印sum1的值

使用遞歸函數(shù)方法:

def sum_lewis(n):
    if n <=0:
        return 'sorry,must be >=1'
    if n == 1:
        return 1
    return n * sum_lewis(n-1)
print(sum_lewis(100))

簡述遞歸函數(shù)方法運(yùn)行過程

先定義一個(gè)名為sum_lewis的函數(shù)崇渗,并指定一個(gè)n的形參
例行判斷如果參數(shù)為0就返回提示字逗,如果參數(shù)為1就返回1
經(jīng)過雙層判斷之后(增加程序容錯(cuò)率),在返回一個(gè)計(jì)算方式。 n * sum_lewis(n-1) 在返回值中再次調(diào)用該函數(shù)本身宅广,這種行為就可以把他稱作遞歸函數(shù)葫掉。
===> sum_lewis(5)
===> 5 * sum_lewis(4)
===> 5 * (4 * sum_lewis(3))
===> 5 * (4 * (3 * sum_lewis(2)))
===> 5 * (4 * (3 * (2 * sum_lewis(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
===> 5 * 24
===> 120
以上為如果參數(shù)為5的,運(yùn)行推斷過程乘碑。

小結(jié)

<b>使用遞歸函數(shù)的優(yōu)點(diǎn)是邏輯簡單清晰挖息,缺點(diǎn)是過深的調(diào)用會(huì)導(dǎo)致棧溢出金拒。
針對(duì)尾遞歸優(yōu)化的語言可以通過尾遞歸防止棧溢出兽肤。尾遞歸事實(shí)上和循環(huán)是等價(jià)的套腹,沒有循環(huán)語句的編程語言只能通過尾遞歸實(shí)現(xiàn)循環(huán)。
Python標(biāo)準(zhǔn)的解釋器沒有針對(duì)尾遞歸做優(yōu)化资铡,任何遞歸函數(shù)都存在棧溢出的問題电禀。
作者郵箱:devopslewis@outlook.com
微信:Stephen_403 文章有任何問題、錯(cuò)誤笤休、版權(quán)可以聯(lián)系作者及時(shí)更正

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尖飞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子店雅,更是在濱河造成了極大的恐慌政基,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闹啦,死亡現(xiàn)場離奇詭異沮明,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)窍奋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門荐健,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人琳袄,你說我怎么就攤上這事江场。” “怎么了窖逗?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵址否,是天一觀的道長。 經(jīng)常有香客問我滑负,道長在张,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任矮慕,我火速辦了婚禮帮匾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痴鳄。我一直安慰自己瘟斜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布痪寻。 她就那樣靜靜地躺著螺句,像睡著了一般。 火紅的嫁衣襯著肌膚如雪橡类。 梳的紋絲不亂的頭發(fā)上蛇尚,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音顾画,去河邊找鬼取劫。 笑死匆笤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谱邪。 我是一名探鬼主播炮捧,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼惦银!你這毒婦竟也來了咆课?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤扯俱,失蹤者是張志新(化名)和其女友劉穎书蚪,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迅栅,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡善炫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了库继。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箩艺。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宪萄,靈堂內(nèi)的尸體忽然破棺而出艺谆,到底是詐尸還是另有隱情,我是刑警寧澤拜英,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布静汤,位于F島的核電站,受9級(jí)特大地震影響居凶,放射性物質(zhì)發(fā)生泄漏虫给。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一侠碧、第九天 我趴在偏房一處隱蔽的房頂上張望抹估。 院中可真熱鬧,春花似錦弄兜、人聲如沸药蜻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽语泽。三九已至,卻和暖如春视卢,著一層夾襖步出監(jiān)牢的瞬間踱卵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工据过, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惋砂,地道東北人蔬充。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像班利,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子榨呆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 學(xué)習(xí)網(wǎng)址:遞歸函數(shù) 注意重點(diǎn): 遞歸函數(shù)的優(yōu)點(diǎn)是定義簡單罗标,邏輯清晰。理論上积蜻,所有的遞歸函數(shù)都可以寫成循環(huán)的方式闯割,但...
    王詩翔閱讀 367評(píng)論 0 0
  • 題目: 計(jì)算階乘n!=n*(n-1)*(n-2)*…3*2*1 用遞歸函數(shù)來表示為: def f(x): if ...
    kevin282閱讀 2,251評(píng)論 0 2
  • 漢諾塔中,我們需要考慮的是將當(dāng)前層數(shù)中除去最后一層的其余層數(shù)通過C柱放在B柱上竿拆,然后將最后一層從A柱移到C柱宙拉,最后...
    PlutoMa閱讀 274評(píng)論 0 0
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,216評(píng)論 0 4
  • 1.函數(shù)參數(shù)的默認(rèn)值 (1).基本用法 在ES6之前,不能直接為函數(shù)的參數(shù)指定默認(rèn)值丙笋,只能采用變通的方法谢澈。
    趙然228閱讀 684評(píng)論 0 0