В вашем коде есть несколько проблем.Например, в расчете (* ptr1 / * ptr2) + (* ptr2 / * ptr3)) вы делите int, поэтому вы получаете целое число, а не двойное, как я предполагаю.
Были также некоторыеошибки в вычислениях термина (я предполагаю, что 'a' - первый член в обратной серии, простите, если я ошибаюсь).Для расчета таблицы q [] вы рассчитываете только q [0] и q [1].Я исправил это, предполагая, что это q [] соответствует ряду Фибоначчи в прямом порядке.
Я не думаю, что необходимо использовать указатели на int вместо int.Я изменил его, но, возможно, это не ваш выбор.
Я вставил запись некоторых промежуточных значений: я использовал их для исправления кода.Я позволил им показать вам возможный способ отладки программы.Я также использовал вектор вместо массива C.Вам будет легко вернуться к массиву, если вам это нужно.Кроме того, я старался следовать вашему собственному коду и не изменять все.
Поскольку я, возможно, изменил значение ptr1 и ptr2, пожалуйста, проверьте, что вычисление теста сходимости («коэффициент») все еще верно.
Вот код, похоже, работает:
#include <iostream>
#include <vector>
using namespace std;
void reverseFibonacci(int, int);
int main()
{
int a, b;
cout << "what are points 1 and 2?" << endl;
cin >> a >> b;
reverseFibonacci(a, b);
return 0;
}
void reverseFibonacci(int a, int b)
{
const int num_max = 100;
int ptr1 = a;
int ptr2 = b;
int ptr3;
cout << "a = " << a << "\tb = " << b << "\n";
int num = 0;
double ratio;
do
{
ptr3 = ptr1-ptr2;
ptr1 = ptr2;
ptr2 = ptr3;
if ((ptr2 != 0) && (ptr3 != 0))
ratio = static_cast<double> (ptr1) / ptr2 + static_cast<double>(ptr2) / ptr3;
else
ratio = -100.0;
cout << "num = " << num << "\t\tptr2 = " << ptr2 << "\t\tptr1 = " << ptr1 << "\t\tratio = " << ratio<< endl;
num++;
} while ((ratio >= -3.23607) && (num < num_max));
cout << "num = " << num << endl;
int n = num + 2;
vector<int> q(n);
for (int f = 0; f < n; f++)
{
q[f] = ptr2;
ptr3 = ptr1 + ptr2;
ptr2 = ptr1;
ptr1 = ptr3;
}
cout << "Fibonacci series in direct order:\n";
for (auto j : q)
{
cout << j << " ";
}
cout << endl;
}