Funkcja rekurencyjna w C # - Składnia i wykonywanie funkcji rekurencyjnej w C #

Spisie treści:

Anonim

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.

  1. Po pierwsze, stworzyliśmy własną sparametryzowaną funkcję do pobierania wartości wejściowej z funkcji głównej, dla której chcemy obliczyć silnię.
  2. 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ą.
  3. W przeciwnym razie mnożymy obecną liczbę przez funkcję przyjmującą liczbę minus 1 jako parametr.
  4. 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-

  1. Anonimowe funkcje w Matlabie
  2. Funkcje łańcuchowe Tableau
  3. Co to jest testowanie funkcjonalne?
  4. Funkcje C #
  5. Wprowadzenie do funkcji rekurencyjnej w C ++
  6. Poznaj 3 sposoby odczytywania danych wejściowych użytkownika Java