Ta lekcja tyczy się rekurencji, pojęcia typowo związanego z matematyką oraz z informatyką. Część z was na pewno spotkała się już z rekurencją na informatyce w szkole lub na matematyce. Aby dogłębnie zrozumieć czym tak naprawdę jest rekurencja proponuję zajrzeć do: wikipedi Z rekurencji w C# korzystamy w metodach, w skrócie mówiąc metoda która wywołuje samą siebie nazywa się metodą rekurencyjną lub rekursywną. Jakim cudem metoda może wywołać samą siebie? To proste wywoływana jest za każdym razem ta sama metoda, wartości zwrócone bądź pobrane parametry są przechowywane w pamięci, dlatego nie zawsze zaleca się stosowanie metod rekurencyjnych gdyż może to spowodować jej przepełnienie. Zaczniemy może od małego przykładu, bardzo prostego abyś zrozumiał jak to działa.
Początek kodu:
using System;
class rekurencja
{
public void Inkrementuj(int i)
{
Console.WriteLine(i++);
if (i >= 20)
return;
Inkrementuj(i);
}
}
class Pokaz
{
public static void Main()
{
rekurencja R = new rekurencja();
R.Inkrementuj(1);
}
}
Koniec kodu:
W naszym programie deklarujemy klasę o nazwie rekurencja która to zawiera metodę Inkrementuj, metoda ta pobiera parametr ‘i’ typu int, jak widzisz od razu jest on wyświetlany, a następnie inkrementowany za pomocą operatora inkrementacji ++ formy przyrostkowej, jak pamiętasz oznacza to że najpierw wyświetli się wartość ‘i’ a następnie zostanie ona inkrementowana .
Jedną z najważniejszych rzeczy o której należy pamiętać to to, że w którymś momencie musi nastąpić wyjście z metody, jeżeli o tym zapomnimy to metoda się zapętli. To jest bardzo prosty przykład, jednak takim sztandarowym przykładem rekurencji jest obliczanie silni. Np. silnia z 6 to 1*2*3*4*5*6 = 720 czyli silnia z 6 jest wynosi 720
Bez problemu można to napisać na pętli, ale my zrobimy inaczej napiszemy to za pomocą metody rekurencyjnej:
Początek kodu:
using System;
class rekurencja
{
public int Silnia(int i)
{
if (i != 1)
return Silnia(i – 1) * i;
else
return 1;
}
}
class Pokaz
{
public static void Main()
{
rekurencja R = new rekurencja();
Console.WriteLine(R.Silnia(6));
}
}
Koniec kodu:
Ok. nasz program liczy Silnię. Ale jak to robi? Otóż mamy metodę Silnia która to pobiera argument, następnie sprawdza czy nie jest on równy 1, jeżeli jest to kończy działanie metody i zwraca jeden, jeżeli nie wywołuje metodę Silnia z parametrem pomniejszonym o jeden i tak samo się dzieje w następnej w tym monecie nic nie jest mnożone, mnożenie na dobrą sprawę zacznie się gdy ostatnia metoda Silnia zwróci 1, tedy przed ostania pomnoży otrzymane 1 przez 2 i zwróci 2 następnie przed przed ostania zwrócone 2 pomnoży przez 3 i zwróci 6… i tak dalej. Jeżeli tego wszystkiego nie zrozumiałeś, to usiądź na spokojnie i spróbuj napisać własne metody rekurencyjne. Jako takie zadanie na małą rozgrzewkę bo dawno zadania wam nie dawałem, napisz program który wyświetli nam tekst w odwrotnej kolejności, za pomocą rekurencji np. „to jest tekst” wynik „tsket tsej ot”.
A oto rozwiązanie zdania, ważne jest tutaj to, aby rozwiązać je samemu nawet po 4 czy 10 dniach myśląc nad tym ale samemu, dlatego nie zaglądaj poniżej do kiedy nie rozwiążesz zadania:
Początek kodu:
using System;
class rekurencja
{
string tekst = „”;
public rekurencja(string abc)
{
tekst = abc;
}
public void Odwrotnosc(int a)
{
if (a != tekst.Length – 1)
Odwrotnosc(a + 1);
Console.Write(tekst[a]);
}
}
class Pokaz
{
public static void Main()
{
rekurencja R = new rekurencja(„To jest tekst”);
R.Odwrotnosc(0);
}
}
Koniec kodu: