修复递归数组

时间:2012-02-26 02:11:54

标签: c++ arrays recursion

  

可能重复:
  Make an array to store the calculated numbers in memory

我必须修改一些代码来做一些新的事情。

这些是新要求:

- 程序需要使用一个数组,在其中将计算出的Fibonacci数存储在内存中。 (可以是全局变量)

- 数字数组也被认为是一个部分填充的数组,因此我需要声明一个变量来跟踪存储在数组中的项目数。

- 数字数组应声明有46个位置。

- 数字46应该被声明为名为MAXFIB的全局常量,因此数字46不应该多次出现在我的程序中。

- 在程序开始时,需要使用“起始知识”(基本情况)初始化数字数组 - 前两个斐波纳契数是1和1.将它们存储到前两个数组位置。 / p>

- 添加一组额外的基本情况,以便如果“n”参数值太低或太高,则该函数将停止并返回-1,表示错误情况。

- 添加一个额外的基本案例,这样如果我们要查找的Fibonacci数已经存储在数组中,那么我只需要从数组中检索它并返回它。

- 对于递归情况,它仍然需要像以前一样递归调用函数两次,但是在计算了数字之后,我需要在返回之前将它存储到数组中。

到目前为止,这是我的代码:

#include <iostream>
using namespace std;

// Returns the nth number in the fibonacci sequence
int fib(int n, int* memory);

const int MAXFIB = 46;

int main()
{
    int memory[MAXFIB];

    memory[0] = 1;
    memory[1] = 1;

    cout << fib(46) << endl;

    system("pause");
    return 0;
}

int fib(int n, int* memory)
{
    // Base cases
    if (n < 1 || n > MAXFIB) return -1;

    if (n == memory) return memory;

    // Recursive cases
    memory[n] = fib(n-1) + fib(n-2);
    return;

}   

所以,我的问题是,我做得对,做错了什么?我需要纠正和/或完成什么?

谢谢

2 个答案:

答案 0 :(得分:1)

不是特别语言的超级熟练,但在你的方法调用fib你只是把46。在你的fib()定义中你有两个参数指定。也许在方法调用中,添加参数以填充int * memory。

再次......不熟练掌握语言。只是一种可能性。

答案 1 :(得分:1)

你为什么用46? cout&lt;&lt; fib(46)&lt;&lt; ENDL;

你可以用 cout&lt;&lt; fib(MAXFIB)&lt;&lt; ENDL; 将来很容易改变