【发布时间】:2015-07-05 02:29:58
【问题描述】:
我知道:
int fib(int n)
{
if (n == 0 || n == 1)
return 1;
return fib(n − 1)+ fib(n − 2);
}
当 n=5 时,fib(5) 计算为:
fib(5)
fib(4) + fib(3)
(fib(3) + fib(2)) + (fib(2) + fib(1))
((fib(2) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) + fib(1))
(((fib(1) + fib(0)) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) + fib(1))
注意每个基本元素都被使用了多次,有没有办法使用map来存储之前的值,然后简单地做fib(n − 1) + fib(n − 2)?
【问题讨论】:
-
是的,它叫memoization。
-
可以使用迭代法
-
这实际上是动态编程和记忆化的一个常见示例。只需快速进行 Google 搜索 - 您应该会找到一些解释它的资源。这是一个:geeksforgeeks.org/program-for-nth-fibonacci-number
-
顺便说一句:你肯定知道你可以通过比内公式得到斐波那契数列的第 n 个元素...
标签: c++ dynamic-programming fibonacci