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

По дефиниция последователността на Фибоначи е целочислената последователност, в която всяко число след първите две е сумата от двете предходни числа. За да опростите:

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

Той има много приложения в математиката и дори в търговията (да, добре сте прочели: търговия), но това не е смисълът на тази статия. Моята цел днес е да ви покажа как можете да изчислите всеки член от тази поредица от числа в пет различни езика за програмиране, използвайки рекурсивни функции.

Рекурсивните функции са тези функции, които по същество се наричат.

Искам да отбележа, че това не е най-добрият метод за това - всъщност може да се счита за най-основния метод за тази цел. Това е така, защото изчислителната мощност, необходима за изчисляване на по-големи условия от серията, е огромна. Броят на извикванията на функцията причинява препълване на стека в повечето езици.

Все пак, за целите на този урок, нека започнем.

Първо, нека помислим как ще изглежда кодът. Той ще включва:

· Рекурсивна функция F (F за Фибоначи): за изчисляване на стойността на следващия член.

· Нищо друго: Предупредих ви, че е съвсем основно.

Нашата функция ще вземе n като вход, който ще се отнася до n -ия член на последователността, която искаме да бъде изчислена. Така че F (4) трябва да върне четвъртия член на последователността.

Да го планираме. Кодът, независимо от езика, трябва да изглежда по следния начин:

function F(n)  if n = 0

   return 0  if n = 1

   return 1  else

   return F(n-1) + F(n-2)

Забележка: терминът 0 на последователността ще се счита за 0, така че първият член ще бъде 1; втората, 1; третият, 2; и така нататък. Разбрахте.

Нека да анализираме функцията за момент. Ако получи 0 като вход, връща 0. Ако получи 1, връща 1. Ако получи 2 ... Е, в този случай попада в оператора else, който ще извика функцията отново за условия 2–1 ( 1) и 2–2 (0). Това ще върне 1 и 0 и двата резултата ще бъдат добавени, връщайки 1. Перфектно.

Сега можете да разберете защо рекурсивните функции са проблем в някои случаи. Представете си, че сте искали 100-ия член на последователността. Функцията ще се извика за 99-ия и 98-ия, които сами ще извикат функцията отново за 98-ия и 97-ия, 97-ия и 96-ия член ... и т.н. Би било наистина бавно.

Но добрата новина е, че всъщност работи!

Затова нека започнем с различните езици. Няма да давам твърде много подробности (всъщност, никакви подробности), за да направя вашето четене по-добро. Така или иначе няма много подробности.

Нека да скочим в него:

Python

def F(n):  if n == 0:

   return 0  if n == 1:

   return 1  else:

   return F(n-1) + F(n-2)

Бързо

func F(_ n: Int) -> Int {  if n == 0 {    return 0

 }  if n == 1 {    return 1

 }  else {    return F(n-1) + F(n-2)

 }}

JavaScript

function F(n) {  if(n == 0) {    return 0;

 }  if(n == 1) {    return 1;

 }  else {    return F(n-1) + F(n-2);

 }}

Java

public static int F(int n) {  if(n == 0) {    return 0;

 }  if(n == 1) {    return 1;

 }  else {    return F(n-1) + F(n-2);

 }}

C ++

int F(int n) {  if(n == 0) {    return 0;

 }  if(n == 1) {    return 1;

 }  else {    return F(n-1) + F(n-2);

 }}

И това е. Избрах тези езици само въз основа на популярността - или поне защото тези 5 са ​​най-често срещаните, които използвам. Те не са в определен ред. Те могат да бъдат класифицирани по синтаксична трудност, според мен, от Python (най-лесният) до C ++ (най-трудният). Но това зависи от вашето лично мнение и вашия опит с всеки език.

Надявам се тази статия да ви е харесала и ако имате въпроси / препоръки или просто искате да поздравите, коментирайте по-долу!