递归实现是最常想到的方法,代码如下:
//递归方式 long Fibonacci(unsigned n) { if (n==0) { return 0; } else if (n==1) { return 1; } else { return Fibonacci(n-1)+Fibonacci(n-2); } }
显然递归并不是最好的方法,当n较大时效率将非常低下。
较好的思路是:
从下往上计算,首先根据f(0)和f(1)算出f(2),再根据f(1)和f(2)算出f(3)……依此类推就可以算出第n项了。这种思路的时间复杂度是O(n)。
//非递归方式 long FibonacciTwo(unsigned n) { int result[2]={0,1}; if (n<2) { return result[n]; } long f_NmisOne=1; long f_NmisTwo=0; long f=0; for (int i=2; i<=n; i++) {//f(n)=f(n-1)+f(n-2) f=f_NmisOne+f_NmisTwo; f_NmisTwo=f_NmisOne; f_NmisOne=f; } return f; }
输出斐波那契数列前21个元素如下:
时间: 2024-10-12 15:37:09