求解Fibonacci序列递归返回函数中的void

时间:2010-09-23 09:41:51

标签: c++ recursion void fibonacci

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

我有:

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))); }

我做得对吗?我从来没有使用过 这种方式之前的参数我不确定 如果我走在正确的轨道上出于某种原因,它是 在斐波那契的递归调用中没有编译, 声明无效指针添加。谢谢!

6 个答案:

答案 0 :(得分:4)

提示:问题在于:fibonacci(--n,n,(n-1),(n+(n-1)));或甚至只有--n。您正在使用指针

答案 1 :(得分:3)

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

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

void fibonacci(int n, int *result).
  • 我用int替换了double,因为我不明白你为什么要用double来存储整数。
  • 我删除了你在函数中没有使用的x和y。

答案 2 :(得分:0)

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

答案 3 :(得分: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声明为正常值,因为您不想修改它。递归调用现在是你的功课:)

答案 4 :(得分:0)

由于这是一项功课,我不会提供工作代码,虽然这里有几点:

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

答案 5 :(得分: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;
}