В C вычисление уравнения с использованием пользовательских вводимых значений не дает ожидаемого результата? - PullRequest
0 голосов
/ 27 февраля 2019

Я делаю задание для своего класса, но я застрял.Назначение:

Написать рекурсивную программу для предварительного вычисления чисел Фибоначчи и сохранения их в массиве.Формула Фибоначчи: Fib (0) = 1, Fib (1) = 1 и Fib (i) = Fib (i - 1) + Fib (i - 2).Сохраните i-е число Фибоначчи по индексу i.Иметь цикл, чтобы прочитать i и напечатать i и i-е число Фибоначчи.Используйте -1, чтобы выйти из цикла.Мой вывод неверен, но я не знаю, как это исправить.Я уже некоторое время пытаюсь, но не могу точно определить свою ошибку.

Мой код

#include <stdio.h>  
double Fib[50]; //globally declared 
int fib(int i)
{               
    for(i=0; i<50; i++) //loop to scan 
    {   
        scanf("%lf", &Fib[i]); //scan and store numbers in an array
        if (Fib[i]==-1) //i =-1 will end loop
            break;
    }       
    Fib[i]= Fib[i-1]+Fib[i-2];//formula     
    if(Fib[i]==0||Fib[i]==1) //i=0 and i=1 will print 1
        Fib[i]=1;
    else if(i>1) //performs the operation with the formula
        printf("%d  %lf\n", i, Fib[i]);
}   
int main()
{
    int i=0;
    fib(i); 
return 0;    
}
Expected result:
user input: 4 10 20 15 5 -1
output:
4 5.000000
10 89.000000
20 10946.000000
15 987.000000
5 8.000000  

My output:
5  20.000000

1 Ответ

0 голосов
/ 27 февраля 2019

Пара точек :

  • Ваша программа не рекурсивная
  • Сначала вычислите весь Fib с помощью вашей рекурсивной функции, а затем после обработки пользовательского ввода вloop

Код ниже имеет структуру для работы с пользовательским вводом, выполните рекурсию :

#include <stdio.h>

// It would make sense for this to store unsigned long long instead of double
// because Fibonacci numbers are always positive integers
unsigned long long Fib[50];

// Your assignment specifically said use a recursive program to compute Fib.
// This is not a recursive function, but it is correct, I will leave the
// recursion for you to work out
void populateFib() {
    Fib[0] = 1;
    Fib[1] = 1;
    unsigned i;
    for (i = 2; i < 50; ++i)
        Fib[i] = Fib[i - 1] + Fib[i - 2];
}

int main() {
    // First compute Fib
    populateFib();

    // Deal with user input in an infinite loop
    for (;;) {
        int input;
        scanf("%d", &input);

        // Condition for breaking the infinite loop
        if (input == -1)
            break;

        // Sanity check the user won't read out of bounds
        if (input < 0 || input >= 50) {
            printf("No!\n");
            continue;
        }

        // Display what the user wants
        printf("%d %llu\n", input, Fib[input]);
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...