#include <iostream> using namespace std; //计算fibonacci数 //方法一:二分递归法,时间复杂度为O(2^n),额外空间复杂度为常数 int RecursiveFibonacci(int n) { return (n < 2) ? n : RecursiveFibonacci(n - 1)+RecursiveFibonacci(n-2); } //方法二:线性递归,时间复杂度为O(n),空间复杂度为O(n) int LinearrecursionFibnoacci(int n,int& prev)//要用到引用,要不不可以!!!! { if (n == 0) { prev = 1; return 0; } else { int prevPrev; prev = LinearrecursionFibnoacci(n - 1, prevPrev); return prevPrev + prev; } } //方法三:迭代法,时间复杂度为O(n),空间复杂度为常数 int IterationFibonacci(int n) { int f = 1, g = 0; while (n--) { g += f; f = g - f; } return g; } int main() { int num_1,num_2,num_3; int f=0; num_1 = RecursiveFibonacci(24); num_2 = LinearrecursionFibnoacci(24, f); num_3 = IterationFibonacci(24); cout << num_1 << endl; cout << num_2 << endl; cout << num_3 << endl; return 0; }
时间: 2024-10-03 23:26:25