Loading...
CvetomirShterev avatar CvetomirShterev 5 Точки

03. Recursive Fibonacci-C#-Fundamentals

Здравейте ! Бих искал да попитам относно задача 3. Recursive Fibonacci-C#-Fundamentals,успявам да я реша ,но не с рекурсия

Това е кодът който написах,- https://pastebin.com/guJuEUhA,работи си дава 100/100. Рових се за memorization и във форума се рових ,но така и не можах да разбера две неща а именно:

1.Що е то рекурсия ?

2.Как да я приложа в тази задача?

Тагове:
1
Module: C# Advanced
kkaraivanov avatar kkaraivanov 486 Точки

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

static long FibonachiRecursion(int n)
{
   if (n <= 2)
   {
      return 1;
   }
   return FibonachiRecursion(n - 1) + FibonachiRecursion(n - 2);
}

 

0
19/03/2020 11:59:12
CvetomirShterev avatar CvetomirShterev 5 Точки

Благодаря ви за помощта !

0
willystyle avatar willystyle 2472 Точки

Здравей,

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

using System;
using System.Collections.Generic;

class MainClass
{
    public static void Main()
    {       
        int n = int.Parse(Console.ReadLine());
        Console.WriteLine(SolveMemoization(n));
    }

    public static double SolveMemoization(int n)
    {
        double result;
        if (memo.ContainsKey(n))
        {
            result = memo[n];
        }
        else
        {
            result = SolveMemoization(n - 1) + SolveMemoization(n - 2);
            memo[n] = result;
        }
        return result;

    }

    static Dictionary<int, double> memo = new Dictionary<int, double>() {
            {1, 1},
            {2, 1}
        };
}


 

0
CvetomirShterev avatar CvetomirShterev 5 Точки

Благодаря ви за помощта !

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.