python 遞歸函數與循環的區別_提升Python效率之使用循環機制代替遞歸函數

斐波那契數列

當年,典型的遞歸題目,斐波那契數列還記得嗎?

def fib(n):

if n==1 or n==2:

return 1

else:

return fib(n-1)+fib(n-2)

當然, 為了程序健壯性,加上try...except...

def fib(n):

if isinstance(n, int):

print('兄弟,輸入正整數哈')

return

try:

if n==1 or n==2:

return 1

elif n <= 0:

print('兄弟別輸入0或負數呀')

else:

return fib(n-1)+fib(n-2)

except RecursionError:

print('兄弟,超過了最大遞歸深度'

是的,無論時間還是空間復雜度,遞歸真的是不太好使哈!這是遞歸的寫法:

def fib(n):

if n==1 or n == 2:

return 1

a, b = 1, 1

for i in range(2, n):

a, b = b, a+b

return b

我稍微解釋三點:

為啥是range(2, n),因為,斐波那契數列從?1 開始,所以?fib(n) 就是數列的第?n 項

由于前兩項都為?1 ,所以要少兩項,為?range(2, n)(要循環?n-2 次)

a, b = b, a+b 這里你也許也有困惑,我簡單說說,一般Python解釋器會將逗號分隔的變量直接看做一個元組,

又因為,解釋器先執行等式右邊的,所以,這樣相當于?元組拆包

a, b = b, a+b 這句話的精髓在于,在等式右邊將?b 視為fib(n-2) ,將?a+b 視為?fib(n-1)

楊輝三角

同樣,先寫遞歸寫法(我這里不考慮特殊情況了,時間有限):

def YH_tri(a, b):

if a == b or b == 0:

return 1

else:

return YH_tri(a-1, b)+YH_tri(a-1, b-1)

老鐵們自己先想想該怎么寫??

總結

以上所述是小編給大家介紹的提升Python效率之使用循環機制代替遞歸函數,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對我們網站的支持!

如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

本文標題: 提升Python效率之使用循環機制代替遞歸函數

本文地址: http://www.cppcns.com/jiaoben/python/266539.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457670.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457670.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457670.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

03_JS數據類型

JS數據類型 基本數據類型 String 字符串類型&#xff0c;申明時用單引號或雙引號引起來&#xff0c;兩種引號不可嵌套&#xff0c;不可混用 Number 數值型&#xff0c;有兩個特殊的數字 Infint:無窮大NaN&#xff1a;非數值型數字&#xff0c;不與任何類型相等 Boolean …

7.5

姓名 崔巍 時間 2016年7月5日 學習內容 最后一次確定同步控制力度等實現細節。 學習了Visual Studio C#軟件測試方面的工具。鞏固了等價類黑盒測試方法的相關理論&#xff0c;并且學習了集成測試、回歸測試的相關內容&#xff0c;并進行了測試。 集成測試&#xff0c;…

python scratch ev3_如何在scratch上連接樂高ev3?

樂高教育的官網有關于EV3使用Python的詳細介紹https://education.lego.com/zh-cn/support/mindstorms-ev3/python-for-ev3?education.lego.com來自網易有道Scratch是現在小朋友們最熱的編程工具&#xff0c;也是各學校和培訓機構對小學生編程的入門首選。網易有道Kada平臺是一…

04_JS運算符

JS運算符 一元運算符 -,正負號&#xff0c;對非數值類型做正負操作會先轉換成數值型&#xff0c;可以用快速進行類型轉換 邏輯運算符 且 &&&#xff0c;從左到右看&#xff0c;一旦返現值為false的表達式立刻返回false&#xff0c;全真為真或 ||&#xff0c;從左到右…

C語言 第八章 函數、指針與宏

一、函數 函數是一個包含完成一定功能的執行代碼段。我們可以把函數看成一個"黑盒子", 你只要將數據送進去就能得到結果, 而函數內部究竟是如何工作的的, 外部程序是不知道的。外部程序所知道的僅限于輸入給函數什么以及函數輸出什么。函數提供了編制程序的手段,使之…

ByteBuffer用法小結

在NIO中,數據的讀寫操作始終是與緩沖區相關聯的.讀取時信道(SocketChannel)將數據讀入緩沖區,寫入時首先要將發送的數據按順序填入緩沖區.緩沖區是定長的,基本上它只是一個列表,它的所有元素都是基本數據類型.ByteBuffer是最常用的緩沖區,它提供了讀寫其他數據類型的方法,且信道…

promise用法_Promise的秘密

寫在前面本篇文章將會帶大家從分解promise入手&#xff0c;一步步實現一個promise。但閱讀之前需要比較熟練地了解了解用法&#xff0c;結合用法看文章可能更容易理解。結構先看一下簡單的用法。const promise new Promise((resolve, reject) > {setTimeout(() > {resol…

SpringMVC視圖解析器(轉)

前言 在前一篇博客中講了SpringMVC的Controller控制器&#xff0c;在這篇博客中將接著介紹一下SpringMVC視圖解析器。當我們對SpringMVC控制的資源發起請求時&#xff0c;這些請求都會被SpringMVC的DispatcherServlet處理&#xff0c;接著Spring會分析看哪一個HandlerMapping定…

05_JS流程控制語句

JS流程控制語句 順序結構 選擇結構 if-else語句 var aprompt(); var bprompt(); var cprompt(); if(a && b || c){alert(); }else if(a || b || c){alert(); }else{alert(); }條件分支語句 var aprompt(); switch(a){case 1:alert("1");break;case 2:al…

ForkJoinPool 學習示例

在JAVA7之前&#xff0c;并行處理數據非常麻煩。第一&#xff0c;你得明確把包含數據的數據結構分成若干份。第二&#xff0c;你要將每個子部分分配給一個獨立的線程。第三&#xff0c;你要在恰當的時候對它們進行同步避免不希望的競爭條件&#xff0c;等待所有線程完成&#x…

python深入_Python深入(上)

作者&#xff1a;Vamei 出處&#xff1a;http://www.cnblogs.com/vamei 歡迎轉載&#xff0c;也請保留這段聲明。謝謝&#xff01;到現在為止&#xff0c;Python學習已經可以告一段落。下面的部分&#xff0c;我想討論Python的高級語法和底層實現。這一部分的內容并不是使用Pyt…

06_JS對象

JS對象 創建對象 構造函數&#xff1a;var obj new Object()對象字面量&#xff1a;var obj {}; 不同&#xff1a;對象字面量可以在創建的同時為對象設置屬性&#xff0c;最后一個屬性后面不要加逗號 對象操作 添加屬性&#xff1a;對象名.新屬性名 值修改屬性&#xf…

BZOJ4107 : [Wf2015]Asteroids

首先將速度相減&#xff0c;變成A在動而B不動&#xff0c;若速度為0則顯然永遠不會相交。 枚舉A的每個點以及B的每條線段&#xff0c;計算這三個點共線的時刻。 將時刻排序&#xff0c;對于每個區間進行三分&#xff0c;用半平面交計算相交面積。 注意特判相交面積為0但是存在交…

Web Service 性能測試工具比較

背景 希望選擇一款Web Service性能測試工具&#xff0c;能真實模擬大量用戶訪問網站時的請求&#xff0c;從而獲取服務器當前的請求處理能力&#xff08;請求數/秒&#xff09;。以微信服務器為例&#xff0c;每個用戶用獨立的登錄token&#xff0c;做各種操作&#xff0c;比如…

python中的常量是什么意思_第14p,Python中的常量與注釋。

大家好&#xff0c;我是楊數Tos&#xff0c;這是《從零基礎到大神》系列課程的第14篇文章&#xff0c;第二階段的課程&#xff1a;Python基礎知識&#xff1a;常量與注釋。學習本課程&#xff0c;建議先看一遍&#xff1a;【計算機基礎知識】課程。一、Python中的常量1、什么是…

07_JS函數

JS函數 函數聲明 使用構造函數 var fun new Function();使用關鍵字 function 函數名(形參){// 函數體 }匿名函數 var fun1 function(){name "fun1" }函數參數 實參&#xff0c;形參都可以是任意數據類型&#xff0c;瀏覽器執行時不會檢查實參類型和數量&…

cocoapods的安裝(這真是一個神奇的東西,每次安裝的方法都不一樣,而且很容易出現各種各樣的錯誤)...

文章開始之前&#xff0c;建議安裝一個顯示網速的插件&#xff0c;不然你不知道到底有沒有下載&#xff0c;也讓生活有一點盼頭 1.因為眾所周知的原因&#xff08;我dang的行為真的是讓人失望&#xff09;&#xff0c;先更換一下ruby鏡像源 $ gem sources --remove https://rub…

轉】MyEclipse使用總結——在MyEclipse中設置jsp頁面為默認utf-8編碼

原博文出自于&#xff1a;http://www.cnblogs.com/xdp-gacl/p/3496161.html        感謝&#xff01; 在MyEclispe中創建Jsp頁面&#xff0c;Jsp頁面的默認編碼是“ISO-8859-1”&#xff0c;如下圖所示&#xff1a; 在這種編碼下編寫中文是沒有辦法保存Jsp頁面的&#…

sum怎么用python_python sum()函數和.sum(axis=0)函數的使用

參考&#xff1a;《Machine Learning in Action》第二章#####################################################################sum函數&#xff1a;sum()函數是內建函數help(sum)函數功能&#xff1a;返回一個數字序列(非字符串)的和&#xff0c;并加上參數start的值(默認為…

08_JS工廠方法和構造函數

工廠方法和構造函數 工廠方法 工廠方法用來批量產生對象 function CreatCar(name,prase){// new 一個對象var obj new Object();obj.name name;obj.parse prase;obj.print function(){console.log(this.name " : " this.parse)};// 返回對象return obj; };va…