2014-04-17 2 views
0

Я написал этот код C для вывода чисел Фибоначчи, но я потерялся относительно того, почему он дает неправильное значение, а также почему числа иногда идут вниз. Что происходит не так и как я могу это исправить?C - Неверные числа фибоначчи

Это дает мне эту последовательность: 0, 0, 1, 1, 2, 1, 3, 4, 3, 5, 5, 6, 8, 7, 13, 8, 21, 9, 34.

#include <stdio.h> 
#include <math.h> 
int MyFibonacciFunction(int n) 
{ 
    if (n == 0) { 
     return 0; 
    } else { 
     if (n == 1) { 
      return 1; 
     } else { 
      return (MyFibonacciFunction((n - 1)) + MyFibonacciFunction((n - 2))); 
     } 
    } 
} 

void main() 
{ 

     int a = 0; 
     while (a < 10) { 
      { 
       printf("%d\n", a); 
       printf("%d\n", MyFibonacciFunction(a)); 
       a = (a + 1); 
      } 
    } 
} 
+2

Ваша последовательность выглядит почти правильно, вы могли бы ожидать 0, 0, 1, 1, 2, 1, 3, 2, 4, 3, 5, 5, 6, 8, 7, 13, 8, 21, 9, 34, потому что вы печатаете как a, так и fibo (a) ... – GHL

+1

Множество лишних prentheses ... и фигурных скобок – Deduplicator

+5

remove 'printf ("% d \ n ", a);'. – BLUEPIXY

ответ

1

Я изменил свой код следующим образом, попробуйте это решает проблему:

#include <stdio.h> 

int MyFibonacciFunction(int n) { 

     if(n == 0) 
     return 0; 
     else if(n == 1) 
     return 1; 
     else 
     return (MyFibonacciFunction((n - 1)) + MyFibonacciFunction((n - 2))); 

} 

int main(void) 
{ 

    int a = 0; 
    while (a < 10) 
     printf("%d\n", MyFibonacciFunction(a++)); 

    return 0; 
} 
+0

, пожалуйста, измените на 'while (a <10) printf («% d \ n », MyFibonacciFunction (a ++));' чтобы успокоить мой ocd – flakes

+0

Да ... @ Calpratt –

+0

Надеюсь, это решит вашу проблему, не так ли? –

0

Если вы не должны использовать рекурсию, то не используйте его. Если это какое-то упражнение с рекурсией, тогда все в порядке. Итеративное программирование выполняется быстрее и экономит память (много).

Смежные вопросы