我的教授要求我们编写一个使用递归来解决斐波纳契数列的程序。这一切都很正常,但他要求我们让函数返回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))); }
我做得对吗?我从来没有使用过 这种方式之前的参数我不确定 如果我走在正确的轨道上出于某种原因,它是 在斐波那契的递归调用中没有编译, 声明无效指针添加。谢谢!
答案 0 :(得分:4)
提示:问题在于:fibonacci(--n,n,(n-1),(n+(n-1)));
或甚至只有--n
。您正在使用指针
答案 1 :(得分:3)
编译器是对的。如果使用指针,则需要取消引用调用中的指针。
但更简单的解决方案是使用这个原型(并匹配所有代码):
void fibonacci(int n, int *result).
答案 2 :(得分:0)
答案 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)
由于这是一项功课,我不会提供工作代码,虽然这里有几点:
答案 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;
}