произведение чисел Фибоначчи C++
нужно рекурсией посчитать произведение чисел Фибоначчи от 1 до N в теории все норм, но на практике работает только для случая N = 4. подскажите пожалуйста в чем проблема?
#include <iostream>
using namespace std;
int fib(int n) {
if (n <= 1) return 1;
else return fib(n - 1) + fib(n - 2);
}
int fibproduct(int m) {
if (m <= 1) return 1;
else return fibproduct(fib(m-1)) * (fib(m));
}
int main(void) {
cout << fibproduct(4);
return 0;
}
Ответы (2 шт):
Есть у меня ощущение, что вам нужно считать произведение всех чисел Фибоначчи от первого до N-го. Тогда надо просто правильно написать функцию произведение - произведение всех чисел от первого до N-го равно произведению всех от первого до N-1-го на N-е число Фибоначчи:
#include <iostream>
using namespace std;
int fib(int n) {
if (n <= 1) return 1;
else return fib(n - 1) + fib(n - 2);
}
int fibproduct(int N) {
if (N <= 1) return 1;
return fibproduct(N-1)*fib(N);
}
int main(void) {
cout << fibproduct(4) << endl;
return 0;
}
int fibproduct(int m) {
if (m <= 1) return 1;
else return fibproduct(fib(m-1)) * (fib(m));
}
вот это монструозная функция,
смотрите что она делает:
fibproduct(fib(m-1))
при m > 4 у вас fib(m-1) > 4 и поэтому функция никогда не закончит своего выполнения, а наоборот будет только увеличивать и увеличивать кол-во итераций и в определённый момент у вас переполнится стек и программа упадет с ошибкой
Вам надо было сделать так:
else return fibproduct(m - 1) * fib(m);