Получение n-го значения серии G (общая последовательность Фибоначчи) - PullRequest
0 голосов
/ 05 мая 2018

Как мы сгенерируем n-й член последовательности Фибоначчи, который имеет начальные значения, отличные от 0 и 1. То есть пользователь задает два начальных значения, скажем, 1 и 4, затем код генерирует Фибоначчи на основе пользовательского ввода , Например, 1 и 4 даст 1,4,5,9,13,23 ... Придумать это довольно просто с помощью табуляции или рекурсии, но я попробовал поискать общую формулу (чтобы сэкономить время выполнения) и остановился на этом:

G (a, b, n) = ((a (√5 - 1) + 2b) Phin + (a (√5 + 1) - 2b) (–phi) n) / (2√5)

Обратите внимание, в вышеприведенной формуле, что "Phin" является Phi к степени n. (Фи ** н)

, где a и b являются начальными значениями, фи, как вы уже догадались, составляет (1 + √5) / 2, а n-е значение должно быть получено.

Я попытался реализовать приведенную выше формулу в python, но не дал ожидаемого результата (значения не соответствуют ожидаемым). Сайт, на котором я нашел эту формулу, нашел , здесь имеет встроенный генератор последовательности, этот генератор работает как положено, а мой код - нет. Кто-нибудь может определить, где я ошибся?

Когда я делаю фибон (1,4,3), он производит 13,260990336999413. Но ответ должен быть 9; 1,4,5,9

G (a, b, n) = ((a (√5 - 1) + 2b) Phin + (a (√5 + 1) - 2b) (–phi) n) / (2√5)

def fibon(a,b,n):
    phi = (1+sqrt(5))/2
    g = ((a*(sqrt(5) - 1)+2*b)*phi**n +(a*(sqrt(5)+1)-2*b)*(-phi)**n)/2*(sqrt(5))
    return g

1 Ответ

0 голосов
/ 05 мая 2018

Вы написали

/2*(sqrt(5))

но это делит на два, а затем умножается на квадратный корень из пяти. Поместите весь делитель в скобки.

Кроме того, вам необходимо отличать Фи (заглавные буквы) от Фи (строчные). Phi = (sqrt (5) + 1) / 2, но phi = (sqrt (5) - 1) /2.

...