【发布时间】:2016-11-20 18:51:58
【问题描述】:
我正在尝试实现基于缓存的斐波那契序列。但是它给了我错误的输出,例如(fibcache(8)给了我13而不是21的答案。但是在某些情况下它给了我正确的输出。例如fibcache(6)给了我8。不知道出了什么问题
#include <stdio.h>
#include <stdlib.h>
#define DCACHE_SIZE 5
int fibcache(int number);
long cacheodd[DCACHE_SIZE] = {0};
long cacheeven[DCACHE_SIZE] = {0};
int i_odd, i_even;
int main(int argc, char *argv[])
{
int fibNum = fibcache(6);
printf("The Fibonacci number is %d\n", fibcache(fibNum));
}
int fibcache(int n)
{
int result;
if (n == 0)
return 0;
if (n == 1)
return 1;
if(n%2==0)
{
if (cacheodd[i_odd] != 0)
result = cacheodd[i_odd];
else
{
cacheodd[i_odd] = fibcache(n-1) + fibcache(n-2);
result = cacheodd[i_odd];
}
}
else
if(n%2==1)
{
if (cacheeven[i_even] != 0)
result = cacheeven[i_even];
else
{
cacheeven[i_even] = fibcache(n-1) + fibcache(n-2);
result = cacheeven[i_even];
}
}
return result;
}
【问题讨论】:
-
你真的应该学习如何使用调试器:)
-
我是 C 的新手。学习使用调试器在我的待办事项列表中 :)
-
@xTiraMissU 使用打印语句 :)
-
提示:
i_odd和i_even取什么值?
标签: c algorithm caching fibonacci