Рубрики
Без рубрики

Последовательность Фибоначчи – объяснена в Python, JavaScript, C ++, Java и Swift

Автор оригинала: FreeCodeCapm Team.

Пау Павон

Последовательность Фибоначчи по определению, целочисленная последовательность, в которой каждый номер после первых двух – сумма двух предыдущих чисел. Чтобы упростить:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …

Он имеет много приложений в математике и даже торговли (да, вы читаете это право: Торговля), но это не точка этой статьи. Моя цель сегодня – показать вам, как вы можете вычислить любой срок этой серии номеров в пяти различных языках программирования, используя рекурсивные функции.

Рекурсивные функции – это те функции, которые, в основном, называют себя.

Я хочу отметить, что это не лучший метод для этого – на самом деле его можно считать наиболее основным методом для этой цели. Это связано с тем, что вычислительная мощность, необходимая для расчета больших сроков серии, огромна. Количество раз вызывается функция, вызывает переполнение стека на большинстве языков.

Все равно, для целей настоящего Учебника, давайте начнем.

Прежде всего, давайте подумаем о том, как будет выглядеть код. Это включает в себя:

· Рекурсивная функция f (f для fibonacci): вычислять значение следующего срока.

· Ничто другое: я предупреждал вас, что это было довольно простое.

Наша функция займет N в качестве ввода, который будет ссылаться на N Термин последовательности, которую мы хотим быть вычисленными. Итак, f (4) должен вернуть четвертый срок последовательности.

Давайте планируем это. Код должен, независимо от языка, выглядеть что-то подобное:

Функция f (n) если Верните 0, если Возвращение 1 остальное Возврат f (N-1) + F (N-2)

Примечание. Срок 0 последовательности будет считаться 0, поэтому первый член будет 1; второй, 1; третий, 2; и так далее. Ты понял.

Давайте проанализируем функцию на мгновение. Если он получает 0 в качестве ввода, он возвращается 0. Если он получает 1, он возвращается 1. Если он получает 2 … ну, в этом случае он попадает в оператор ELVE, который снова позвонит функции для членов 2-1 ( 1) и 2-2 (0). Это вернет 1 и 0, и два результатах будут добавлены, возвращая 1. Идеально.

Теперь вы можете видеть, почему рекурсивные функции являются проблемой в некоторых случаях. Представьте себе, что вы хотели 100-й срок последовательности. Функция позвонит себе на 99-й и 98-й, что сами по себе позвонит функции снова на 98-й и 97-й и 97-й и 96-й термины … и так далее. Это было бы Действительно медленный.

Но хорошая новость в том, что она на самом деле работает!

Итак, давайте начнем с разных языков. Я не буду давать слишком много подробностей (на самом деле, нет деталей вообще), чтобы сделать ваш опыт чтения лучше. В любом случае не слишком много деталей.

Давайте прыгнем в него:

Питон

def f (n): если n: Верните 0, если n: Вернуться 1 else: Возврат f (N-1) + F (N-2)

Быстрый

func f (_ n: int) -> int {Если n {return 0 } Если n {return 1 } Else {return f (n - 1) + f (n-2) }}

Javascript

Функция f (n) {if (n) {return 0; } Если (n) {return 1; } Else {return f (n - 1) + f (n-2); }}

Ява

публичный статический int f (int n) {если (n) {return 0; } Если (n) {return 1; } Else {return f (n - 1) + f (n-2); }}

C ++

int f (int n) {если (n) {return 0; } Если (n) {return 1; } Else {return f (n - 1) + f (n-2); }}

Вот и все. Я выбрал эти языки только на основании популярности – или, по крайней мере, потому что эти 5 являются наиболее распространенными, которые я использую, они не используют конкретный заказ. Они могут быть классифицированы затруднениями синтаксиса, на мой взгляд, от Python (простых) до C ++ (самых сложных). Но это зависит от вашего личного мнения и вашего опыта с каждым языком.

Я надеюсь, вам понравилась эта статья и, если у вас есть какие-либо вопросы/рекомендации или просто хочу сказать привет, комментарий ниже!