Wprowadzenie do funkcji rekurencyjnej w C #
W funkcji rekurencyjnej w języku C # rekursja oznacza to samo znaczenie, co w języku angielskim, znanym jako powtarzanie się. Tak więc rekurencyjny charakter funkcji oznacza wielokrotne wykonywanie tej samej pracy. I tak, jeśli program nie jest obsługiwany poprawnie, na pewno uruchomiłby go w ciągłej pętli. Musimy upewnić się, że określamy odpowiednie warunki wykonywania tych funkcji rekurencyjnych, w przeciwnym razie funkcja będzie się ciągle wywoływać, co prowadzi do ciągłego wykonywania programu. Zobaczmy, jak możemy tworzyć te funkcje w języku C #.
Składnia funkcji rekurencyjnych w C #
Składnia tutaj jest taka sama jak podstawowa składnia funkcji w C #. Spójrzmy tutaj.
Nie ma tutaj żadnej specjalnej składni, ale możemy zauważyć, że funkcja wywołuje się sama w celu dostarczenia wyniku zwrotnego. I musimy bardzo ostrożnie przekazywać te wartości parametrów do tej funkcji rekurencyjnej, ponieważ oczywiście nie chcemy, aby działający kod się nie zatrzymywał.
W powyższej składni nie ma nic takiego, musimy wywoływać funkcję tylko w instrukcjach return. Zamiast tego możemy nawet przypisać wartość zwracaną funkcji rekurencyjnej do zmiennej, a także zwrócić tę zmienną.
Wykonanie faktoryzacji
Tutaj weźmy naszą domyślną instrukcję problemu, Faktoryzacja, do generowania naszej funkcji rekurencyjnej.
Kod:
using System;
class First (
static void Main() (
int result;
result = fact(7);
Console.WriteLine("Factorial is : " + result);
)
public static int fact(int num)
(
if(num==0)
(
return 1;
)
return num*fact(num-1);
)
)
Przyjrzyjmy się procesowi krok po kroku.
- Po pierwsze, stworzyliśmy własną sparametryzowaną funkcję do pobierania wartości wejściowej z funkcji głównej, dla której chcemy obliczyć silnię.
- Następnie stworzyliśmy warunek if, aby sprawdzić, czy podana liczba wynosi zero. Jeśli liczba wynosi zero, zwracamy 1 jako naszą wartość domyślną.
- W przeciwnym razie mnożymy obecną liczbę przez funkcję przyjmującą liczbę minus 1 jako parametr.
- Tak więc to mnożenie się powtarza, aż dojdziemy do liczby 0. Ponieważ domyślnie zapisaliśmy nasz wynik powrotu dla zera jako 1, wynik końcowy zostanie pomnożony przez 1.
Wynik:
Teraz w kodzie zamierzam zastąpić nasz parametr funkcji z num minus 1 na, num. W takim przypadku funkcja będzie się ciągle wywoływać, a proces będzie się powtarzał.
Kod:
using System;
class First (
static void Main() (
int result;
result = fact(7);
Console.WriteLine("Factorial is : " + result);
)
public static int fact(int num)
(
if(num==0)
(
return 1;
)
return num*fact(num);
)
)
Wynik:
Dzięki powyższym wynikom możemy wyraźnie zobaczyć wyjątek przepełnienia stosu, w którym funkcja wielokrotnie się wywołuje. Tylko podświetlona część jest zmieniana w odniesieniu do pierwszego programu.
W ten sam sposób możemy wprowadzić liczbę jako wartość wprowadzoną przez użytkownika, jak poniżej:
Kod:
using System;
class First (
static void Main() (
int result, c;
string a;
Console.Write("Enter value for number :");
a = Console.ReadLine();
c = Convert.ToInt32(a);
result = fact(c);
Console.WriteLine("Factorial is : " + result);
)
public static int fact(int num)
(
if(num==0)
(
return 1;
)
return num*fact(num-1);
)
)
Wynik:
Co jeśli podamy zero jako dane wejściowe? Tak, jeden zostanie zwrócony.
Wynik:
A co jeśli podamy liczbę ujemną?
Wynik:
To dało mi również wyjątek przepełnienia stosu, ponieważ nasza funkcja rekurencji czynnikowej zmniejsza swoją wartość parametru przy każdym wykonaniu. Tak więc liczby ujemne będą się zmniejszać do -6, -7, -8 i tak dalej. Właśnie dlatego wybieramy ten wyjątek.
Czy jako ćwiczenie możesz spróbować utworzyć funkcję rekurencyjną dla liczb ujemnych?
Wskazówka: Możemy przyjąć warunek wstępny liczby mniejszej od zera i dodać jeden do naszego parametru funkcji rekurencyjnej, aż do zera.
Przykłady funkcji rekurencyjnej w C #
Istnieje kilka dobrych przykładów, które można przytoczyć w odniesieniu do funkcji rekurencyjnych:
Mamy kilka innych miejsc, w których możemy korzystać z tych funkcji rekurencyjnych.
- Ciągłe drukowanie liczb z danego punktu początkowego i końcowego. (Program poniżej)
- Dodaj liczby zaczynając od określonego punktu początkowego i zatrzymaj w punkcie końcowym lub po osiągnięciu określonej sumy.
- Wydrukuj liczby, które są podzielone przez określoną liczbę z dowolnego określonego zakresu.
- Chcemy wydrukować dowolną liczbę ciągłych linii lub kropek po napisaniu zdania i wiele innych.
Jak widać funkcja rekurencyjna jest podobna do funkcji pętli, ale w której wielokrotnie wywołujemy tę samą funkcję.
Zobaczmy, jak możemy pisać funkcję rekurencyjną w ciągłym dodawaniu liczb, dopóki program nie znajdzie drugiej liczby podanej jako dane wejściowe.
Kod:
using System;
class First (
static void Main() (
int result, c, d;
string a, b;
Console.Write("Enter value for 1st number :");
a = Console.ReadLine();
c = Convert.ToInt32(a);
Console.Write("Enter value for 2nd number :");
b = Console.ReadLine();
d = Convert.ToInt32(b);
result = add(c, d);
Console.WriteLine("Add is : " + result);
)
public static int add(int num1, int num2)
(
int sum ;
sum=num1;
if (num1 < num2 )
(
num1++;
sum=sum+add(num1, num2);
return sum;
)
return sum;
)
)
Oto co zrobiliśmy to:
- Wzięliśmy dwie liczby num1 i num2 poprzez dane wprowadzone przez użytkownika
- Dodaj funkcję, dodaje liczby od num1, aż otrzyma num2.
Na przykład, jeśli wezmę num1 = 5 i num2 = 8, wówczas suma wyjściowa, którą otrzymamy, to 5 + 6 + 7 + 8, czyli 26.
Wynik:
A co, jeśli dam num1 mniej niż num2?
Wynik:
Daje to jako wartość num1 jako pierwszą, przypisaliśmy wartość sumy do wartości num1 i zwracamy sumę, jeśli instrukcja if nie ma zastosowania.
Czy jako ćwiczenie możesz napisać funkcję rekurencyjną, która wypisze „Lubię kodować”, dopóki nie spełni określonego warunku?
Wskazówka: Możemy postępować zgodnie z tą samą procedurą dodawania, co w powyższym programie.
Wniosek
Tak więc tutaj z powodzeniem wykonaliśmy funkcje rekurencyjne, jak te funkcje są wywoływane i kilka ich przykładów. Dowiedzieliśmy się również, jak prosta różnica w wywołaniu funkcji może spowodować, że program przekroczy granice i utworzy wyjątek.
Polecane artykuły
Jest to przewodnik po funkcji rekurencyjnej w języku C #. Tutaj omawiamy wykonanie generowania funkcji rekurencyjnej z jej przykładami. Możesz również przejrzeć nasze inne powiązane artykuły, aby dowiedzieć się więcej-
- Anonimowe funkcje w Matlabie
- Funkcje łańcuchowe Tableau
- Co to jest testowanie funkcjonalne?
- Funkcje C #
- Wprowadzenie do funkcji rekurencyjnej w C ++
- Poznaj 3 sposoby odczytywania danych wejściowych użytkownika Java