#include
#include
using namespace std;
遞迴:1、程式呼叫自身的程式設計技巧稱為遞迴,是函式自己呼叫自己。
2、使用遞迴要注意的有兩點:
1)遞迴就是在過程或函式裡面呼叫自身;
2)在使用遞迴時, 必須有乙個明確的遞迴結束條件, 稱為遞迴出口.
3、遞迴分為兩個階段:
1)遞推:把複雜的問題的求解推到比原問題簡單一些的問題的求解;
2)回歸:當獲得最簡單的情況後, 逐步返回, 依次得到複雜的解.
4、優點:**更簡潔清晰,可讀性更好遞迴可讀性好這一點,對於初學者可能會反對。
實際上遞迴的**更清晰,但是從學習的角度要理解遞迴真正發生的什麼,是如何呼叫的,呼叫層次和路線,
呼叫堆疊中儲存了什麼,可能是不容易。但是不可否認遞迴的**更簡潔。
5、缺點:由於遞迴需要系統堆疊,所以空間消耗要比非遞迴**要大很多。
而且,如果遞迴深度太大,可能會造成棧溢位
//遞迴法求第n個數的斐波那契數列
long factorial(int n)
//遞迴法計算n的階乘
long factorial(int n)
迭代:迭代:
1、利用變數的原值推算出變數的乙個新值.如果遞迴是自己呼叫自己的話,
迭代就是a不停的呼叫b
2、優點:1)迭代效率高,執行時間只因迴圈次數增加而增加;
2)沒什麼額外開銷,空間上也沒有什麼增加;
3、缺點:1) 不容易理解;
2) **不如遞迴簡潔;
3) 編寫複雜問題時困難。
注意: 能用迭代的不用遞迴,遞迴呼叫函式,浪費空間,並且遞迴太深容易造成堆疊的溢位
//迭代法計算n的階乘
long factorial(int n)
result;
}遞推:
1、遞推演算法是一種簡單的演算法,即通過已知條件,利用特定關係得出中間推論,
直至得到結果的演算法。遞推演算法分為順推和逆推兩種。
2、相對於遞迴演算法,遞推演算法免除了資料進出棧的過程,也就是說,不需要函式不
斷的向邊界值靠攏,而直接從邊界出發,直到求出函式值。
#define size 20
int main()
system("pause");
return 0;
}
遞迴與遞推的區別
今天在學習遞迴和動態規劃時有點迷糊了,兩者無法區別,在網上差了下,總接如下 首先要清楚,遞推就是迭代。1.遞迴其實就是利用系統堆疊,實現函式自身呼叫,或者是相互呼叫的過程.在通往邊界的過程中,都會把單步位址儲存下來,知道等出邊界,再按照先進後出的進行運算,這正如我們裝木桶一樣,每一次都只能把東西方在...
遞迴和迭代的區別
遞迴的基本概念 程式呼叫自身的程式設計技巧稱為遞迴,是函式自己呼叫自己.乙個函式在其定義中直接或間接呼叫自身的一種方法,它通常把乙個大型的複雜的問題轉化為乙個與原問題相似的規模較小的問題來解決,可以極大的減少 量.遞迴的能力在於用有限的語句來定義物件的無限集合.使用遞迴要注意的有兩點 1 遞迴就是在...
遞迴與迭代的區別
遞迴的基本概念 程式呼叫自身的程式設計技巧稱為遞迴,是函式自己呼叫自己.乙個函式在其定義中直接或間接呼叫自身的一種方法,它通常把乙個大型的複雜的問題轉化為乙個與原問題相似的規模較小的問題來解決,可以極大的減少 量.遞迴的能力在於用有限的語句來定義物件的無限集合.使用遞迴要注意的有兩點 1 遞迴就是在...