Всички ние сме направили програмата за изчисляване на сумата от редицата на Фибоначи в часовете по програмиране в нашето училище или университет.

Но винаги е имало голяма вратичка в начина, по който пишем нашите серии на Фибоначи. Нека се потопим малко по-дълбоко в концепцията и различните движещи се части.

Ето нормалния код, който един програмист би написал за Фибоначи, използвайки рекурсия.

Въпреки че това може да изглежда напълно добре и осигурява правилния резултат, в същото време страда от проблема с някои ненужни повиквания!

И така, какъв е проблемът с този код?

Ако изградим дървото на общия брой извиквания, направени от тази функция, то изглежда по следния начин:

Съвсем ясно е, че има прекомерен брой обаждания, които изобщо не са необходими. Функцията се извиква 2, 3 пъти, а за 0 и 1 многократно. Това прави кода не толкова ефективен. Трябва да намерим някакъв начин, по който можем да елиминираме тези повтарящи се извиквания на функцията.

И така, това, което ще направим, е да отидем в Google и да потърсим най-добрия подход и след това да копираме и поставим кода!

Хааааа! Майтапя се. Моите извинения за PJ.

Нека видим по-добър подход сега.

Ако направим масив и продължим да съхраняваме резултата от извикванията, тогава няма да е необходимо да правим повиквания за едно и също цяло число отново и отново.

И така, нека направим нов масив и засега инициализираме всички стойности на -1.

И след това, след като всяка функция върне обратно стойността, ние ще я съхраним в съответния елемент на масива.

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

А ето и дървото с по-добър подход.

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

И това е вашата подобрена версия на кода!

Насладете се на Buds!

Ето някои от моите профили, ако искате да се свържете с този маниак!

https://linkedin.com/rajatmw1999

https://github.com/rajatmw1999