2013-04-30 4 views
-4

Может ли кто-нибудь предоставить отзыв о моем коде, приведенном ниже? Я несколько раз делал ряд Фибоначчи на других языках, но по какой-то нечетной причине он не печатает правильную серию, когда я ее кодирую в C. Я не могу понять, что я сделал неправильно.Серия 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; 
} 
+2

Отсутствует заявление «для»? – Paul

+0

Логика в вашей программе неверна, и я не думаю, что она компилируется. Исправьте программу, чтобы она компилировалась, смотри выход и выясняла, можете ли вы объяснить, почему вывод неправильный, перейдя через написанную вами функцию. Обратите внимание, что традиционное определение Фибоначчи использует рекуррентное отношение. – jxh

+0

Спасибо большое. Я немного поработал над кодом, и я прочитал еще кое-что о кодировании на C. Я думаю, что теперь у меня есть смысл. – user2336380

ответ

0

Я боюсь, что вы должны действительно очистить ваш code.The следующее абсолютно плохого в C.

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

Я уверен, что вы собираетесь here.But в for петли, который знает, что вы имели в виду? Затем вы вложили одиночный else в блок if в Fibonacci(). В вашей программе есть много ошибок, поэтому позвольте мне дать вам программу, которая создает серию Фибоначчи, исходя из того, сколько чисел в серии требуется пользователю (выбор введен с клавиатуры). Попробуйте понять эту программу. Это очень легко, так как логика серии 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 и y к 1 вместо инициализации x, как 0 .Выберите код для его достижения.

0

у вас есть это (int i = 0; i < n; i++) и вы должны иметь for (int i = 0; i < n; i++)

0

Вы пытаетесь вычислить и напечатать первые числа п fibbonaci. Первое число fibbonaci равно 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; 
} 
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; 
} 
Смежные вопросы