rekurencja - jak to działa

2015-01-07 20:18
0

Witam, mógłby krok po kroku ktoś mi wytłumaczyć jak działa metoda Silnia w tym kodzie ?

class rekurencja
    {
        public int Silnia(int i)
        {
            if (i != 1)
                return (i-1) * i;
            else
                return 1;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            rekurencja R = new rekurencja();
            Console.WriteLine(R.Silnia(6));
            Console.Read();
        }
    } 

Pozostało 580 znaków

2015-01-07 20:22
0

Ni jak, bo w tym kodzie jej nie ma.
Jeśli umiesz mnożyć, to rozumiesz funkcję, jaką masz w kodzie (to nie jest silnia). (i-1) * i
(oczywisty proof: http://ideone.com/1abAx3)

edytowany 3x, ostatnio: spartanPAGE, 2015-01-07 20:24

Pozostało 580 znaków

2015-01-07 20:35
3

Na (poprawionym) przykładzie:

int silnia(int n) {
  if(n <= 1)
    return 1;
  else
    return n * silnia(n - 1)
}

Rozpatrzymy jak przebiega wykonanie dla silnii 5:

=> silnia(5)
=> 5 * silnia(4)
  // n jest wieksze od 1, wiec podstawiamy 5 pod wyrazenie wewnatrz else
  // ewaluujemy przy okazji parametr przekazywany do funkcji
=> 5 * (4 * silnia(3))
  // robimy dokladnie to samo co wyzej, z tym ze musimy pamietac o pomnozeniu przez 5 z poprzedniej linijki
=> 5 * (4 * (3 * silnia(2)))
=> 5 * (4 * (3 * (2 * silnia(1))))
  // teraz dochodzimy do przypadku bazowego, wiec pod silnia(1) podstawiamy wartosc 1
=> 5 * (4 * (3 * (2 * 1)))
  // odwijamy po kolei wynik
=> 5 * (4 * (3 * 2))
=> 5 * (4 * 6)
=> 5 * 24
=> 120
dzięki za szczegółowy opis ! - RideorDie 2015-01-08 19:09

Pozostało 580 znaków

2015-01-07 21:48
0

Jak zrozumiesz działanie stosu i jak wygląda wywołanie i 'przejście' przez funkcję na niższym poziomie to będzie ci łatwiej pojąć działanie rekurencji.
noname zrobił też ładny schemat, które może pomóc.

Pozostało 580 znaków

2015-01-08 17:59
0

Ok, dzięki Panowie.

Przerabiam sobie kurs C# z 4programmers, i tam rekurencja odnosiła się do przykładu wstawionego przeze mnie.

Miałem stosy i kolejki na algorytmach to może jakoś ogarnę.

Podaj link do kursu, to poprawimy błędny przykład. - ŁF 2015-01-11 01:18
@RideorDie, przecież to nie jest kurs z 4programmers, no i tam jest dobrze, źle przepisałeś. - some_ONE 2015-01-11 18:40
Teraz to już widzę że nie dopisałem Silnia.. Przepraszam, ślepy jestem. Kurcze a byłem przekonany że ta strona jakoś wiąże się z tym forum. Jeszcze raz przepraszam za zamieszanie :( - RideorDie 2015-01-11 19:19

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0