以下哪段代码能解决斐波拉契数列问题,且内存消耗最小 A int Fib(int n){ if (n<=2) return 1; return Fib(n-1)+Fib(n-2); } B int Fib(int n){ int a,b,c; a = 1; b = 1; c = 1; for (int i=3;i<=n;i++){ c = a+b; a = b; b = c; } return c; } C int Fib(int n){ int *f = new int[n+1]; f[1]=1; f[2]=1; for (int i=3;i<=n;i++) f[i]=f[i-1]+f[i-2]; return f[n]; } D int Fib(int n){ int *f = new int[n+1]; f[1]=1; f[2]=1; for (int i=3;i<n;i++) f[i]=f[i-1]+f[i-2]; return f[n]; }
时间: 2024-04-26 10:20:35 浏览: 122
斐波拉契数列代码及前900项
答案是B。B中的代码使用了动态规划的思想,使用了三个变量a、b、c来记录斐波那契数列中的三个数,每次循环更新a、b、c的值,最终返回c即可。这种方法的时间复杂度为O(N),空间复杂度为O(1),内存消耗最小。而A中的代码使用了递归的方式,时间复杂度为O(2^N),空间复杂度为O(N),内存消耗较大。C中的代码使用了动态分配内存的方式,时间复杂度为O(N),空间复杂度为O(N),内存消耗较大。D中的代码存在一个问题,就是在循环中应该是i<=n而不是i<n,导致最终返回的结果错误。
阅读全文