|
本帖最后由 981013 于 2016-8-30 16:25 编辑
给段C吧
[mw_shl_code=c,true]#include <stdio.h>
#define MAX 10
int cache[MAX]={0,1};
int fib(int n) {
if(cache[n] != -1) //已经缓存了fib(n)
return cache[n]; //直接返回缓存的值
int result = fib(n-1) + fib(n-2);
cache[n] = result; //更新缓存
return result;
}
int main(int argc, const char * argv[]) {
//初始化所有数字的结果为未计算
for (int i=2; i<MAX; ++i) //如果你的编译器不支持C99(如啊哈C的默认状态),请将int i提前
cache = -1;
printf("%d\n",fib(9));
return 0;
}
[/mw_shl_code]
PS:状态转移方程和数列前项后项之间的关系式差不多。 |
|