-4

任何人都可以就下面给出的我的代码提供反馈吗?我已经用其他语言多次完成了斐波那契数列,但由于某些奇怪的原因,当我用 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;
}
4

4 回答 4

0

恐怕你需要真正清理你的代码。以下在 C 中是绝对错误的。

(int i = 0; i < n; i++)

我确定您打算在这里for循环。但是谁知道您的想法?else然后,您在 .中的if块中包含了一个单独的Fibonacci()数字。您的程序中存在大量错误,所以让我给您一个程序,该程序根据用户想要的系列中的数字(从键盘输入的选择)创建斐波那契系列。请试着理解这个程序。这很容易,因为斐波那契数列背后的逻辑本身很简单。只是很明显你对C语言很陌生。

#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...像初始化一样,x而不是初始化为.Tweak 代码来实现它。y1x0

于 2013-04-30T15:49:22.363 回答
0

您正在尝试计算和打印前 n 个斐波那契数。第一个斐波那契数是 0,然后是 1,之后的每个数字都是前两个斐波那契数之和。

示例:0, 1, 1, 2, 3, 5, 8, 13, 21, ... 你得到了漂移。

您的代码的问题是您没有走斐波那契路径。

在您的代码中: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;
 }
于 2013-04-30T15:29:46.350 回答
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;
}
于 2013-04-30T15:29:50.257 回答
0

你有这个(int i = 0; i < n; i++),你应该有for (int i = 0; i < n; i++)

于 2013-04-30T15:09:43.093 回答