Числа Фибоначчи с коэффициентами

      Комментарии к записи Числа Фибоначчи с коэффициентами отключены

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 2 года/лет, 5 мес. назад.

  • Автор
    Сообщения
  • #1821

    questioner
    Участник

    Не могли бы помочь с решением задачи на рекурсию в swi-prolog. Суть задачи состоит в том, чтобы выводить на экран числа Фибоначчи, но не совсем обычные. Числа подчиняются закону Fn = a*(Fn-1)+b(Fn-2). Коэффициенты а и b могут быть как положительными так отрицательными. Желательно не использовать больше двух накопителей. Заранее спасибо! Известно, что на вход будет подаваться (a,b,Fn-1,Fn-2,n).

    Прочитал все по рекурсии. Не получается написать функцию потому что не могу понять как обеспечить корректную работу программы в случае, если множители a и b разных знаков. Когда знаки одинаковые — никакой разницы с обычными числами нет, а когда одно из них отрицательное — ничего не работает.

    Вот пример кода.

    fib(0,0,0,0):-!.
    fib(N,1,A,B):-
      N<3,A\=0,B\=0,!.
    fib(N,R,A,B):-
      A\=0;B\=0,!.
    fib(N,R,A,B):-
      N1 is A*(N-1),N2 is B*(N-2),!,
      fib(N1,R1,A,B),fib(N2,R2,A,B),
      R is R1+R2,!.

  • #1822

    Чем Вам мешают знаки чисел? — Неужели умножение выполнится неправильно?
    Я изменил код вот так:

    fib2(A, B, N, R):-
      fib2(A, B, N, 1, 1, 0, R), !.
    fib2(_A, _B, N, N, Cur, _, Cur).
    fib2(A, B, N, K, Cur, Prev, R):-
      K1 is K + 1, Cur1 is A * Cur + B * Prev,
      fib2(A, B, N, K1, Cur1, Cur, R). 

    Первая функция вспомогательная, нужна лишь для вызова функции с дополнительными аргументами — начальными значениями чисел Фибоначчи. В эту же функцию целесообразно поместить обработку некорректных данных (например отрицательное значение N).

    Вторая функция четвертым аргументом она принимает счетчик, который контролирует чтобы функция выполнилась ровно N раз. Если значение счетчика совпадает с N — функция возвращает накопленный в буфере результат. У функции используется два буфера — текущее и предыдущее значения чисел Фибоначчи (на их основе можно рассчитать следующее).
    Если счетчик еще не достиг требуемого значения — рассчитывается число, при этом используются коэффициенты в соответствии с заданием.

Для ответа в этой теме необходимо авторизоваться.