遞迴演算法效率簡析

2021-08-29 20:40:16 字數 962 閱讀 5545

遞迴最常遇到的問題就是棧溢位

,所以在函式遞迴時一定要有合適的終止條件

函式在每次遞迴時,每進行一次新的呼叫,都將建立一批變數,它們將掩蓋遞迴函式前一次呼叫所建立的變數。

對於前一節講到的用遞迴函式實現階乘,其實並不是階乘的很好的乙個例子,很多人認為這種做法比較「高階」,實則不然,這種做法的效率對於用迴圈求階乘沒有任何優勢

,反而有些問題用階乘來做會帶來恐怖的效率之低》__》要明白:階乘是函式的一次一次呼叫,每個函式的開啟,引數必須壓到堆疊中,為區域性變數分配記憶體空間,暫存器的值必須儲存等等,所有的遞迴均如此,所以簡單的迴圈迭代可以解決的事,何必大開記憶體消耗呢??

-_-

#includeint fibonacci(int n);

int main()

int fibonacci(int n)

目測估計至少要算十分鐘

........這效率,不敢想象吧,所以不僅要會遞迴,還要知道啥時候該用啥時候不該用!!

簡單的分析一下為啥上面用遞迴來求乙個稍微比較大的斐波那契數就如此之低效率,在函式中,每乙個斐波那契數的計算都分割為前乙個數和前前乙個數,以此類推,不知是否聽說過2的n次方的恐怖?,,?,所以在計算第三十個斐波那契數時,第三個斐波那契數就要被計算317811次.......,當計算第五十個斐波那契數時,可以想象,你的電腦在瘋狂運轉,可依舊得不出結果!!

所以,斐波那契數的計算得用迭代的方法來計算,**如下:

#includeint main()

printf("斐波那契數為:%ld\n", result);

return 0;

}

JAVA基礎 簡析遞迴演算法

概念 遞迴演算法 遞迴演算法是把問題轉化為規模縮小了的同類問題的子問題,然後遞迴呼叫函式 或者過程 來表示函式的解。遞迴函式 乙個過程 或者函式 直接或間接呼叫自己本身,這種過程 或者函式 叫做遞迴函式。特點 遞迴就是在過程或函式裡呼叫自身。在使用遞迴策略時,必須有乙個明確的遞迴結束條件。稱為遞迴出...

簡析遞迴思想及其典型演算法

遞迴 也就是在執行過程中自己呼叫自己 乙個過程或 函式在其定義或說明中有直接或間接呼叫自身的一種方法。它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算。它可以用有限的 語句來定義物件的 無限集合 一般來說,遞迴需...

cartographer演算法簡析

1 魯棒性好,尤其在沒有imu的輔助下,應對旋轉速度高的突然轉向,沒有出現建圖錯誤。由於採用了回環檢測,可以消除積累誤差,建圖效果比較穩定。3 介面封裝得很簡潔,給人的感覺是一款穩定,可靠,易用的軟體包。主要 1.1 real time loop closure in 2d lidar slam i...