Мне была отправлена эта красивая нерекурсивная функция для вычисления последовательности фибоначчи.
Итак, я закодировал немного С# и смог проверить, что все номера до 1474 были правильными.
Проблема возникает при попытке вычислить ее для 1475 и выше. Мои математические навыки в С# просто не справляются с задачей выяснения другого пути. Итак, есть ли у кого-то лучший способ выразить эту конкретную математическую функцию в С#? кроме традиционного способа выполнения рекурсивной функции?
Кстати, я начал использовать BigInteger в качестве возвращаемого типа. Но проблема действительно возникает при попытке повысить (1 + Math.Sqrt(5)/2) до 1475-й мощности. Я просто не вижу, какой тип данных мне нужен (и механизм в этом отношении), чтобы заставить это вернуться с чем-то другим, кроме бесконечности.
Здесь начальная точка.
private Double FibSequence(Int32 input) {
Double part1 = (1 / Math.Sqrt(5));
Double part2 = Math.Pow(((1 + Math.Sqrt(5)) / 2), input);
Double part3 = Math.Pow(((1 - Math.Sqrt(5)) / 2), input);
return (part1 * part2) - (part1 * part3);
}
И нет, это не домашнее задание. Просто "простая" проблема для медленного дня.