遞迴的本質就是壓棧和出棧的過程。
遞迴雖然簡潔,但是它也有顯著的缺點。遞迴由於是函式呼叫自身,而函式呼叫是有時間和空間消耗的:每一次函式呼叫,都需要在記憶體棧中分配空間以儲存引數、返回位址及臨時變數,而且往棧中壓入資料和彈出資料都需要時間。
一、效率斐波那契數列遞迴中有可能很多計算都是重複的,從而對效能帶來很大的影響。遞迴的本質是把乙個問題分解成多個小問題。如果多個小問題存在相互重疊的部分,那麼就存在重複的計算。比如「斐波那契數列」。
二、空間
除了效率之外,遞迴還有可能引起更嚴重的問題:呼叫棧溢位。每個程序的棧的容量是有限的,當遞迴呼叫的層級太多時,就會超出棧的容量,從而導致棧舉出。
#include
// 斐波那契數列遞迴寫法,時間複雜度以n的指數方式遞增。
long
long
fibonacci
(unsigned n)
// 斐波那契數列用迴圈實現,時間複雜度是o(n)。
long
long
fibonacci
(unsigned n);if
(n <2)
return res[n]
;long
long first =0;
long
long second =1;
long
long result =0;
for(
unsigned i =
2; i <= n;
++i)
return result;
}
缺陷和缺陷報告
文章目錄 一 缺陷的基本概述 1 缺陷的定義 重要 2 缺陷屬性 二 缺陷的生命週期 重要 三 缺陷的識別 四 缺陷報告 五 測試需求 測試用例 缺陷報告的關係?軟體未實現產品說明書要求的功能 軟體出現了產品說明書指明不該出現的功能 軟體實現了產品說明書未提到的功能 軟體未實現產品說明書雖未明確提及...
缺陷的生命週期 缺陷的等級
1 blocker 崩潰 阻礙開發或測試工作的問題 1 造成系統崩潰 宕機 死迴圈,導致資料庫資料丟失,與資料庫連線錯誤,主要功能喪失,基本模組缺失等問題。如 錯誤 死迴圈 資料庫發生死鎖 重要的一級選單功能不能使用等 該問題 在測試中較少出現,一旦出現應立即中止當前版本測試 2 造成資料洩漏的安全...
軟體的缺陷
什麼是軟體缺陷 1不符合設計需求 2不滿足使用者確定需求 缺陷產生的原因 1交流不夠 2需求不斷變化 3文件不完善 4參與人員過度自信 5程式本身有錯誤 6軟體的複雜性 7工期短,任務重,時間壓力大 8軟體開發工具或系統硬體自身的缺陷 判斷缺陷是問題的方法 1通過參考文件來確認 2通過了解軟體產品的...