基于递归缓存的Fibonacci

时间:2016-11-20 18:51:58

标签: c algorithm caching fibonacci

我正在尝试实现基于缓存的Fibonacci序列。但它给了我错误的输出例如(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;
}

1 个答案:

答案 0 :(得分:0)

你有一些问题:

  • 您实际打印sdk.dir=/path/to/sdk/in/your/computer,这是一个比fib(fib(6))更大的数字。

  • 你的缓存功能太复杂了:为什么处理偶数和奇数不同?您应该设置一个大于缓存大小的特殊情况,并验证是否已计算缓存值。

这是一个更简单的版本:

fib(6)