Числа Фибоначчи на C++
Решаю задачу на сайте. Нужно написать программу для вычисления чисел Фибоначчи. Написал первую программу, сайт сказал, что она выполнялась слишком долго и была прервана. Переделал решение. У меня всё работает, но сайт почему-то говорит, что программа выдаёт ошибку в процессе выполнения. Проблема во мне или в тестирующей системе?
#include <iostream>
using namespace std;
int fib(int n){
int arr[n]{0,1};
for(int i=2;i<=n;i++){
arr[i] = arr[i-1] + arr[i-2];
}
return arr[n];
}
int main(){
int n;
cin >> n;
cout << fib(n) << endl;
return 0;
}
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
int fib(int n)
{
int a = 0, b = 1;
for(int i=2;i<=n;i++)
{
int с = a + b;
a = b;
b = c;
}
return b;
}
Так не хотите? И за границы массива не выскочите - из-за отсутствия массива :)
Автор решения: Эникейщик
→ Ссылка
В int входит только 46 чисел Фибоначчи, их можно просто вручную записать в массив, скопировав из таблички, и выдавать нужное по индексу.
int fib(int n) {
if ((n > 45) || (n < 1)) { return -1} // ошибка
int fib[] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903};
return fib[n-1];
}