【发布时间】:2019-09-21 01:23:37
【问题描述】:
我需要创建一个程序,要求用户输入整数 N,然后使用斐波那契数列的 void 函数打印出斐波那契数列的前 N 项。在一个实例之后,程序必须询问用户是否希望继续。如果用户回答 Y,程序必须向用户询问另一个整数 N,然后打印出斐波那契数列的前 N 项,依此类推。
我已经为此编写了代码。它在第一个实例中起作用。问题是,如果用户选择再做一次,结果就不再是正确的斐波那契数列了。下面是代码。
#include<stdio.h>
void printFibonacci(int n){
static int n1=0,n2=1,n3;
if(n>0){
n3 = n1 + n2;
n1 = n2;
n2 = n3;
printf("%d ",n3);
printFibonacci(n-1);
}
}
int main()
{
int n;
char choice;
printf("Enter the number of elements: ");
scanf("%d",&n);
printf("Fibonacci Series: ");
printf("%d %d ",0,1);
printFibonacci(n-2);//n-2 because 2 numbers are already printed
printf("\nDo you wish to continue?(Y/N)");
scanf(" %c", &choice);
while (choice=='Y')
{
printf("Enter the number of elements: ");
scanf("%d",&n);
printf("Fibonacci Series: ");
printf("%d %d ",0,1);
printFibonacci(n-2);//n-2 because 2 numbers are already printed
printf("\nDo you wish to continue?(Y/N)");
scanf(" %c", &choice);
}
return 0;
}
预期的结果是斐波那契数列。当我运行上面的代码时,如果我说 N = 5,它会给出正确的结果: 0,1,1,2,3。 在我对“您希望继续吗?(是/否)”回答是之后出现问题。如果我再次输入 N = 5,我希望得到 0,1,1,2,3,但我得到的是 0,1,5,8,13。
【问题讨论】:
-
我认为你应该将 static var n1,n2,n3 重置为 0。