Fibonacci数列的递归与非递归实现算法详解

xiaoxiao2021-02-28  35

递归算法

因为递归需要不断的调用自身,当n过大的时候,程序将会很慢效率不高,不推荐使用,关于递归实现算法,也很简单,很多教科书上都是这种解法。

//递归算法 long long Fibonacci(unsigned int n) { if (n == 0) return 0; if (n == 1) return 1; return Fibonacci(n - 1) + Fibonacci(n - 2); } 非递归算法

我主要讲述一下非递归算法的实现,非递归算法是比较实用的,也是面试官比较喜欢的一种方法

递归的代码之所以慢是因为重复的计算太多,我们只需要想办法避免重复计算就好了。比如我们将已经得到的数列中间项保存起来,如果下次需要计算的时候我们先查一下,如果前面已经计算过了句不用重复计算了,更简单的办法就是从下往上计算,首先呢根据f(0)和f(1)算出f(2),再根据f(1)和f(2)算出f(3)以此类推就可以算出n项了,很容易理解,复杂度为O(N):

//非递归算法 long long Fibonacci(unsigned int n) { int result[2] = { 0,1 }; if (n < 2) return result[n]; long long fibone = 0; long long fibtwo = 1; long long fibn = 0; for (unsigned int i = 2; i <= n; i++) { fibn = fibone + fibtwo; fibtwo = fibn; fibone = fibtwo; } return fibn; }

转载请注明原文地址: https://www.6miu.com/read-59986.html

最新回复(0)