Мне прислали эту прекрасную нерекурсивную функцию для вычисления последовательности Фибоначчи.
Я написал немного кода на C # и смог проверить, что все числа до 1474 верны.
Проблема возникает при попытке вычислить его для 1475 и выше. Мои математические навыки на C # не подходят для того, чтобы найти другой способ. Так, Есть ли у кого-нибудь лучший способ выразить эту конкретную математическую функцию в С #? кроме традиционного способа выполнения рекурсивной функции?
Кстати, я начал использовать BigInteger в качестве возвращаемого типа. Но проблема действительно возникает при попытке возвести (1 + Math.Sqrt (5) / 2) в 1475-ю степень. Я просто не понимаю, какой тип данных мне нужен (или механизм в этом отношении), чтобы заставить это вернуться с чем-то другим, кроме Infinity.
Вот отправная точка.
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);
}
И нет, это не домашнее задание. Просто «простая» задача для медленного дня.