兩種遞迴演算法的比較
首先來看第一種:
def fab(n):
if(n<1):
print('輸入有誤!!')
return -1
if n==1 or n==2:
return 1
else:
return fab(n-1)+fab(n-2)
假設輸入n=5,則遞迴過程如下圖:
可以看出,在第二次呼叫fab(3)時,又重新開始呼叫fab(2)和fab(1)。
然後來看第二種:
dic={0:0,1:1} def fab(n): if n in dic: return dic[n] else: temp = fab(n-1)+fab(n-2) dic[n] = temp return temp
同樣假設輸入n=5,則遞迴過程如下圖:
可以看出,第二次呼叫fab(2)和fab(3)時,可以直接返回。
程式碼來源:http://www.runoob.com/python3/python3-step1.html
大概就這樣吧!
相關推薦
兩種遞迴演算法的比較
首先來看第一種: def fab(n): if(n<1): print('輸入有誤!!') return -1 if n==1 or n==2: return 1 else: return fab(n-
Java中檔案的兩種遞迴查詢方法
最近,需要用寫小工具來進行大量的檔案讀寫操作,不可避免的用到檔案目錄的遞迴,下面有兩種方法,一種是方法遞迴,一種是NIO的遞迴。效率應該是後一種優先,因為第一種我在學習機上跑竟然溢位了。 第一種: File file = new File(path);
二叉樹----資料結構:二叉樹的三種遍歷,利用遞迴演算法。
二叉樹----資料結構:二叉樹的三種遍歷,利用遞迴演算法。 魯迅:總之歲月漫長,然而值得等待。 #define CHAR /* 字元型 */ /* #define INT /* 整型(二者選一) */ #
貪心演算法,遞迴演算法,動態規劃演算法比較與總結
一般實際生活中我們遇到的演算法分為四類: 一>判定性問題 二>最優化問題 三>構造性問題 四>計算性問題 而今天所要總結的演算法就是著重解決 最優化問題 《演算法之道》對三種演算法進行了歸納總結,如下表所示: 分
建立有向圖的鄰接表,深度優先遍歷和廣度優先遍歷的遞迴與非遞迴演算法,判斷是否是有向無環圖,並輸出一種拓撲序列
/*(1)輸入一組頂點,建立有向圖的鄰接表,進行DFS(深度優先遍歷)和BFS(廣度優先遍歷)。 寫出深度優先遍歷的遞迴和非遞迴演算法。 (2)根據建立的有向圖,判斷該圖是否是有向無環圖,若是,則輸出其一種拓撲有序序列。*/ #include<stdio.h>
從一道騰訊演算法題到一種遞迴形式
演算法題目: 12個高矮不同的人排兩行,一行六人,在保證每行從左到右依次增高,每列從前到後依次增高的前提下,一共有多少種排法? 思路: 我們用陣列來表示這兩排人: 假設高矮不同的12個人我們分別用0~11來表示。 通過簡單的思考,我們可以斷定:前排的最左邊應該為0,後排的
for迴圈和遞迴演算法的執行效率比較(c語言)
實驗目的 在程式語言中,對比不同程式設計風格的程式碼寫法,或者通過使用不同的編譯器和編譯優化引數,通過編譯器生成彙編程式碼,靜態分析所生成彙編程式碼的執行效率。 實驗平臺、工具 在window 7平臺下,採用vc++ 6.0編譯器來編寫相應的C程式,然後通過UltraCom
三種快速排序演算法的實現(遞迴演算法、非遞迴演算法、三路劃分快速排序)
快速排序的三個步驟: 1、分解:將陣列A[l...r]劃分成兩個(可能空)子陣列A[l...p-1]和A[p+1...r],使得A[l...p-1]中的每個元素都小於等於A(p),而且,小於等於A[p
二叉樹三種遍歷非遞迴演算法
1.先序遍歷非遞迴演算法 #define maxsize 100 typedef struct { Bitree Elem[maxsize]; int top; } SqStack; void PreOrderUnrec(Bitree t) { SqStack s; Stack
虛方法與兩種重寫方法的比較
直接 方法調用 可訪問性 err 方法 圖解 span 類型 ase 虛方法virtual..override: 1.派生類的方法和基類的方法有相同的簽名和返回類型。 2.基類的方法使用virtual標註。 3.派生類的方法使用override標註。 class MyBa
二叉樹遍歷之遞迴演算法
作者:石鍋拌飯 原文連結 二叉樹的遍歷演算法有多種,典型的有先序遍歷、中序遍歷、後序遍歷以及層序遍歷。而且這些遍歷的遞迴演算法較為簡單,程式碼很少,容易實現,本文就是彙總二叉樹遍歷的遞迴演算法,非遞迴演算法將在下一篇文章中進行總結。本文中用到的二叉樹例項如下:
Python漢諾塔問題遞迴演算法與程式
漢諾塔問題: 問題來源:漢諾塔來源於印度傳說的一個故事,上帝創造世界時作了三根金剛石柱子,在一根柱子上從上往下從小到大順序摞著64片黃金圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一回只能移動一個圓盤,只能移動在最頂端的圓盤。有預言說
2018.10.31 遞迴演算法總結
///十進位制轉二進位制 void dectobin( int n ) { if(n==0) return; dectobin(n/2); printf("%d",n%2); } ///遞迴求斐波那契數列 int fib(int n) { if(n==1 ||
[計算機程式設計C++] Fibonaci數列的遞迴與非遞迴演算法實現
本文是對西安交通大學C++慕課第三章程式設計練習的16題的講解。 參考部落格:https://blog.csdn.net/zombie_slicer/article/details/38871799 題目內容: 編寫程式,顯示Fibonaci序列的前n項(從
【資料結構週週練】016 利用遞迴演算法及孩子兄弟表示法建立樹、遍歷樹並求樹的深度
一、前言 從今天起,就給大家分享一些樹的程式碼啦,不僅僅是二叉樹,我們要弄明白,普通的樹用資料結構怎麼儲存,它有哪些操作,它可以實現哪些功能? 可能大家要問了,二叉樹不是還沒有寫完嗎,線索二叉樹呢?二叉排序樹呢?平衡二叉樹呢?大家不要急,我們通過二叉樹來入門樹的演算法及程式碼實現,然後學
【資料結構週週練】015 利用遞迴演算法建立鏈式儲存的二叉樹並轉換左右孩子結點
一、前言 哈哈,今天就是程式設計師節啦,祝大家1024程式設計師節快樂。 今天要給大家分享的演算法是交換二叉樹是的左右孩子結點,比較簡單,需要建立一個結點用來暫存左孩子結點,下面給大家送上程式碼。 二、題目 將下圖用二叉樹存入,並交換二叉樹是的左右孩子結點。其中圓角矩形內為結點資
【資料結構週週練】014 利用棧和非遞迴演算法求鏈式儲存的二叉樹是否為完全二叉樹
一、前言 首先,明天是個很重要的節日,以後我也會過這個節日,在這裡,提前祝所有程式猿們,猿猴節快樂,哦不,是1024程式設計師節快樂。 今天要給大家分享的演算法是判斷二叉樹是否為完全二叉樹,相信大家對完全二叉樹的概念並不陌生,如果是順序儲存就會很方便,那鏈式儲存怎麼判斷呢,我的做法是:若
【資料結構週週練】013 利用棧和非遞迴演算法求二叉樹的高
一、前言 二叉樹的高是樹比較重要的一個概念,指的是樹中結點的最大層數本次演算法通過非遞迴演算法來求得樹的高度,借用棧來實現樹中結點的儲存。 學英語真的很重要,所以文中的註釋還有輸出以後會盡量用英語寫,文中出現的英語語法或者單詞使用錯誤,還希望各位英語大神能不吝賜教。 二、題目 將
【資料結構週週練】012 利用佇列和非遞迴演算法實現二叉樹的層次遍歷
一、前言 二叉樹的遍歷是比較多樣化的遍歷,有很多種遍歷方式,先序遍歷,中序遍歷,後序遍歷,層次遍歷等等。本次給大家講的是層次遍歷,為了方便,我將題目中的資料改為編號,從左往右,從上往下依次遍歷。方便大家看到結果。 二、題目 將下圖用二叉樹存入,並通過層次遍歷方式,自上而下,從左往右對
【C語言】遞迴演算法的學習
一、初識遞迴 程式呼叫自身的程式設計技巧稱為遞迴( recursion)。 一個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少