1

我的教授要求我们编写一个程序,使用递归来求解斐波那契数列。这一切都很正常,但他要求我们让我们的函数返回无效。我已经为此工作了几天,但找不到解决方法。

我有:

void fibonacci(double *n,double *x,double *y,double *result) {
     if(*n == 1)
          *result = 0;
     else if(*n == 2)
          *result = 1;
     else
          fibonacci(--n,n,(n-1),(n+(n-1))); }

我做的对吗?我以前从未以这种方式使用参数,我不确定我是否走在正确的轨道上。由于某种原因,它没有在对斐波那契的递归调用中进行编译,说明无效的指针添加。谢谢!

4

6 回答 6

4

提示:问题就在那里:fibonacci(--n,n,(n-1),(n+(n-1)));甚至就在那里--n。您正在使用指针

于 2010-09-23T09:44:41.777 回答
3

编译器是对的。如果使用指针,则需要取消引用调用中的指针。

但更简单的解决方案是改用这个原型(并将所有代码与之匹配):

void fibonacci(int n, int *result).
  • 我已经用 int 替换了 double,因为我不明白你为什么要使用 double 来存储整数。
  • 我已经删除了您在函数中不使用的 x 和 y。
于 2010-09-23T09:45:17.347 回答
0

不它不是。首先,您要减去指向 float 的指针(在 --n 处),这可能很容易(即使您编译并运行它)会产生访问冲突。它正确地抱怨类型。该函数接受的类型是指针,我敢打赌您正在传递浮点数。

于 2010-09-23T09:47:42.870 回答
0

我想应该是这样的:

void fibonacci_list()
{
   int count,next=1,prev1=0,prev2;
   printf("1");
   for(count=2;count<=12;count++)
   {
       prev2=prev1;
       prev1=next;
       next=prev1+prev2;
       printf("%d ",next);
   }
   printf("...");
   return;
}
于 2013-12-24T15:18:51.440 回答
0

使用它作为开始:

void fibonacci(double n, double & result) {
    if(n == 1)
        result = 0;
    else if(n == 2)
        result = 1;
    else {
        // gotta figure that part out yourself
    }
}

通过声明result为引用,您的修改将更改传递的实际参数的值。由于这是 C++ 引用,因此应该首选。您仍然可以声明n为正常值,因为您不想修改它。递归调用现在是你的作业:)

于 2010-09-23T09:55:55.300 回答
0

由于这是一个家庭作业,我不会提供工作代码,尽管这里有几点:

  1. 使用引用比使用指针更简单
  2. 您确实需要增加结果,而不是将其设置为 0 或 1。因此,您需要通过引用分配值为 0 的 int 传递给第一个函数调用。
  3. 考虑公式:对于所有 n > 2,f(n) = f(n-1) + f(n-2);对于 n=1,f(n) = 0,对于 n=2,f(n) = 1。
于 2010-09-23T09:56:55.853 回答