使用缓存进行递归Fibonacci计算 - 无法找到错误

时间:2013-04-04 09:20:08

标签: c algorithm recursion

我写了一个简单的函数来计算斐波纳契数,但它会进入无限循环和崩溃。我似乎无法在这里找到问题所在。

#include <stdio.h>

int fib(int number, int *cache);

int main(int argc, char *argv[])
{
    int cache[20] = {0};
    int result = fib (3, cache);
    printf("%d ", result);
}

int fib(int number, int *cache)
{
    if (number == 0) return 0;
    if (number == 1) return 1;

    if (cache[number] != 0) return cache[number];

    int result = fib(number - 1, cache) + (number - 2, cache);
    cache[number] = result;
    return result;
}

2 个答案:

答案 0 :(得分:5)

此行包含错误

int result = fib(number - 1, cache) + (number - 2, cache);
缺少

fib。它应该是

int result = fib(number - 1, cache) + fib(number - 2, cache);

答案 1 :(得分:0)

除了@MOHAMED的答案之外,你只需初始化cache[0],其他元素可以包含任意垃圾(访问它们确实是未定义的行为)。按预期工作; - )