有人可能会对我下面给出的代码提供反馈意见吗?我已经在其他语言中多次完成了Fibonacci系列,但由于一些奇怪的原因,当我在C中编码时,它不会打印正确的系列。我似乎无法弄清楚我做错了什么。
#include <stdio.h>
int fibonacci (int n)
{
(int i = 0; i < n; i++)
{
if (i == 0 || i == 1)
{
printf("%d,", i);
else
{
printf("%d,", ((i-1) + (i-2)));
}
}
}
int main ()
{
int (*fnctPtr)(int number);
fnctPtr = &fibonacci;
fnctPtr(9);
return 0;
}
答案 0 :(得分:0)
你有这个(int i = 0; i < n; i++)
,你应该有for (int i = 0; i < n; i++)
答案 1 :(得分:0)
您正在尝试计算并打印前n个fibbonaci数字。 第一个fibbonaci数字是0,然后是1,那么之后的每个数字是前两个fibbonaci数的总和。
示例:0,1,1,2,3,5,8,13,21,......你得到漂移。
您的代码存在的问题是您没有沿着fibbonacci路径走下去。
在您的代码中:printf("%d,", ((i-1) + (i-2)));
你实际上是将索引添加到数组中,而没有构建数组或链表。
在C中执行此操作的简单有效方法,无需递归或数组:
// Prime the first two fibbonaci numbers
int a = 0; // prior fibbonnaci number
int b = 1; // current fibbonacci number
// Special case, print up to first 2 fibbonacci numbers
if (n >= 1) printf("%d,", a); // first fibbonacci number
if (n >= 2) printf("%d,", b); // second fibbonacci number
// now for the rest of fibbonacci numbers
for (int i = 2; i < n; i++) {
int next = a + b;
printf("%d,", next);
// rotate the numbers
a = b;
b = next;
}
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
void fibonacci (int n){
int *k = malloc(n*sizeof(int));
k[0]=0;k[1]=1;
for(int i = 0; i < n; i++){
if (i == 0 || i == 1)
printf("%d,", k[i]);
else
printf("%d,", k[i] = k[i-1] + k[i-2]);
}
free(k);
}
int main () {
void (*fnctPtr)(int number);
fnctPtr = fibonacci;
fnctPtr(9);
return 0;
}
答案 3 :(得分:0)
我担心你需要真正清理你的代码。以下是C中的绝对错误。
(int i = 0; i < n; i++)
我相信你打算在这里进行for
循环。但是谁知道你的想法?然后你在else
的{{1}}区块中附加了一个单独的if
。你的程序中有很多错误,所以让我给你一个根据有多少创建斐波那契数列的程序用户想要的系列中的数字(从键盘输入的选项)。请尝试理解这个程序。这很简单,因为Fibonacci系列背后的逻辑本身就很简单。只是很明显你对C语言很新。
Fibonacci()
由于您说您已在其他语言中实施了此系列,因此您不会将该系列作为#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,l,x=1,y=1,z;
printf("Enter how many Fibonacci numbers you want\n");
scanf("%d",&l);
printf("The Fibonacci series of %d numbers is\n",l);
if(l==1)
{
printf("1");
exit(0);
}
if(l==2)
{printf("1+1");
exit(0);
}
printf("1+1+");
for(i=3;i<=l;i++)
{
z=x+y;
printf("%d",z);
x=y;
y=z;
if((i+1)<=l) printf("+");
}
}
启动,我的程序将0,1,1,2,3,5.....
初始化为1,1,2,3,5...
和{ {1}} x
代替将y
初始化为1
。调整代码以实现它。