Úvod do rekurzivní funkce v C #
V rekurzivní funkci v C # znamená rekurze stejný význam jako v anglickém jazyce, přesně známý jako opakování. Rekurzivní povaha funkce tedy znamená opakovanou práci na stejné práci. A ano, pokud se s programem nebude zacházet správně, určitě by se program spustil v nepřetržité smyčce. Musíme se ujistit, že při provádění těchto rekurzivních funkcí specifikujeme správné podmínky, jinak by tato funkce volala znovu a znovu, což by vedlo k nepřetržitému provádění programu. Nyní pojďme a podívejme se, jak můžeme tyto funkce vytvořit v C #.
Syntaxe rekurzivních funkcí v C #
Syntaxe je zde stejná jako syntaxe základní funkce v C #. Pojďme se sem podívat.
Neexistuje žádná zvláštní syntaxe, ale můžeme pozorovat, že funkce volá sama sebe, aby poskytla výsledek návratu. Při předávání těchto hodnot parametrů do této rekurzivní funkce musíme být velmi opatrní, protože samozřejmě nechceme běžet kód, který se nezastaví.
Ve výše uvedené syntaxi není nic jako, musíme funkci volat pouze v návratových příkazech. Spíše můžeme dokonce vrátit proměnnou návratovou hodnotu rekurzivní funkce a tuto proměnnou také vrátit.
Provedení faktorizace
Zde si vezmeme výchozí prohlášení o problému, faktorizace, pro generování naší rekurzivní funkce.
Kód:
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);
)
)
Podívejme se na postup krok za krokem.
- Nejprve jsme vytvořili vlastní parametrizovanou funkci, abychom převzali vstupní hodnotu z hlavní funkce, pro kterou chceme vypočítat faktoriál.
- Poté jsme vytvořili podmínku if, abychom zkontrolovali, zda je dané číslo nulové. Pokud je číslo nula, vracíme 1 jako naši výchozí hodnotu.
- Jinak vynásobíme současné číslo funkcí, která jako parametr vezme číslo mínus 1.
- Takže toto násobení se opakuje, dokud se nedostaneme na číslo 0. Ve výchozím nastavení jsme psali náš návratový výstup pro nulu jako 1, konečný výsledek by byl vynásoben 1.
Výstup:
Nyní v kódu nahradím náš funkční parametr z num mínus 1 na num. V tomto případě by funkce volala znovu a znovu a proces by se opakoval.
Kód:
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);
)
)
Výstup:
Prostřednictvím výše uvedeného výstupu můžeme jasně vidět výjimku přetečení zásobníku, kde funkce opakovaně volá sama sebe. Pouze zvýrazněná část se změní s ohledem na první program.
Stejným způsobem můžeme vytvořit číslo jako hodnotu zadanou uživatelem, jako je níže:
Kód:
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);
)
)
Výstup:
Co když jako vstup dáme nulu? Ano, jeden by se vrátil.
Výstup:
Co když tedy dáme záporné číslo?
Výstup:
To mi také dalo výjimku přetečení zásobníku, protože naše faktoriální rekurzní funkce snižuje hodnotu parametru při každém spuštění. Záporná čísla by se tedy snížila na -6, -7, -8 atd. To je důvod, proč jdeme k této výjimce.
Jako cvičení můžete zkusit vytvořit rekurzivní funkci pro záporná čísla?
Tip: Můžeme vzít předběžnou podmínku na číslo menší než nula a přidat jednu do našeho rekurzivního funkčního parametru, dokud nula nenastane.
Příklady rekurzivní funkce v C #
Existuje několik dobrých příkladů, které lze citovat s ohledem na rekurzivní funkce:
Máme několik dalších míst, kde můžeme tyto rekurzivní funkce používat.
- Tisk čísel z daného počátečního bodu a koncového bodu nepřetržitě. (Program níže)
- Přidejte čísla začínající od určitého počátečního bodu a končící v koncovém bodě nebo po dosažení určité částky.
- Tisk čísel, která jsou rozdělena jakýmkoli konkrétním číslem v jakémkoli konkrétním rozsahu.
- Chceme vytisknout libovolný počet souvislých čar nebo teček po napsání věty a mnoho dalších.
Jak můžete pozorovat, rekurzivní funkce je podobná funkčnosti smyčky, ale kde stejnou funkci voláme opakovaně.
Podívejme se, jak můžeme psát rekurzivní funkci při nepřetržitém přidávání čísel, dokud program nenajde druhé číslo, které je zadáno jako vstup.
Kód:
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;
)
)
Zde jsme udělali následující:
- Prostřednictvím uživatelských vstupů jsme vzali dvě čísla num1 a num2
- Funkce Add, přidává čísla počínaje číslem num1, až získává číslo num2.
Například když vezmu num1 = 5 a num2 = 8, pak výstupní součet, který dostaneme, je 5 + 6 + 7 + 8, což je 26.
Výstup:
A co když dám num1 méně než num2?
Výstup:
Jako první udává jako num1 hodnotu, přiřadili jsme součtu k hodnotě num1 a vrácenou částku, pokud není příkaz if použitelný.
Jako cvičení můžete napsat rekurzivní funkci pro tisk „Líbí se mi kódování“, dokud nenastane určitá podmínka?
Tip: Můžeme postupovat stejným postupem jako při přidání výše uvedeného programu.
Závěr
Zde jsme úspěšně provedli rekurzivní funkce, jak se tyto funkce nazývají, a jejich několik příkladů. Také jsme se dozvěděli, jak jednoduchý rozdíl ve vyvolání funkce může způsobit, že program vyčerpá své hranice a vytvoří výjimku.
Doporučené články
Toto je průvodce rekurzivní funkcí v C #. Zde diskutujeme provedení generování rekurzivní funkce s jeho příklady. Další informace naleznete také v dalších souvisejících článcích.
- Anonymní funkce v Matlabu
- Tableau String Functions
- Co je funkční testování?
- C # Funkce
- Úvod do rekurzivní funkce v C ++
- Naučte se 3 způsoby, jak přečíst uživatelský vstup Java