var fibonacci = (function() { var memo = {}; function f(n) { var value; if (n in memo) { value = memo[n]; } else { if (n === 0 || n === 1) value = n; else value = f(n - 1) + f(n - 2); memo[n] = value; } return value; } return f; })();
上面是一个优化了的递归法求fibonacci数列的方法,转换为其他语言(方法不能嵌套)怎么写?
不支持方法嵌套的语言要引入一个全局变量,这里给出C#中的写法,其他语言应该都可以这样写:
static void Main(string[] args) { Console.WriteLine(fibonacci(3));//2 Console.WriteLine(fibonacci(60));//1548008755920 Console.WriteLine(fibonacci(100));//3736710778780434371 Console.Read(); } static Dictionary<int, long> memo = new Dictionary<int, long>(); static long fibonacci(int n) { long value = 0; if (memo.ContainsKey(n)) value = memo[n]; else { if (n == 0 || n == 1) value = n; else value = fibonacci(n - 1) + fibonacci(n - 2); memo[n] = value; } return value; }
时间复杂度为O(2n)
不是已经优化过了吗,时间复杂度还是O(2n)吗?