Maison  >  Article  >  développement back-end  >  Fonction récursive en C#

Fonction récursive en C#

WBOY
WBOYoriginal
2024-09-03 15:14:33458parcourir

Dans Fonction récursive en C#, Récursion signifie désigner la même signification que dans la langue anglaise, précisément connue sous le nom de se répéter. Ainsi, la nature récursive d’une fonction signifie qu’elle effectue le même travail à plusieurs reprises. Et oui, si le programme n’est pas géré correctement, il l’exécutera certainement en boucle continue. Nous devons nous assurer de spécifier les conditions appropriées lors de l'exécution de ces fonctions récursives, sinon la fonction s'appellerait elle-même encore et encore, conduisant à une exécution continue du programme. Allons-y et voyons comment nous pouvons créer ces fonctions en C#.

Syntaxe des fonctions récursives en C#

La syntaxe ici est la même que la syntaxe des fonctions de base en C#. Jetons un coup d'oeil ici.

Fonction récursive en C#

Il n'y a pas de syntaxe particulière ici, mais on peut observer qu'une fonction s'appelle elle-même en fournissant le résultat de retour. Et nous devons être très prudents lorsque nous transmettons ces valeurs de paramètres dans cette fonction récursive, car nous ne voulons évidemment pas d'un code en cours d'exécution qui ne s'arrête pas.

Dans la syntaxe ci-dessus, il n'y a rien de tel, nous devons appeler la fonction uniquement dans les instructions return. Au lieu de cela, nous pouvons même attribuer la valeur de retour de la fonction récursive à une variable et renvoyer également cette variable.

Exécution de la factorisation

Prenons ici notre énoncé de problème par défaut, Factorisation, pour générer notre fonction récursive.

Code :

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);
}
}

Jetons un coup d'œil au processus étape par étape.

  1. Tout d'abord, nous avons créé notre propre fonction paramétrée pour prendre une valeur d'entrée de la fonction principale, pour laquelle nous voulons calculer la factorielle.
  2. Ensuite, nous avons créé une condition if pour vérifier si le nombre donné est zéro. Si le nombre est zéro, alors nous renvoyons 1 comme valeur par défaut.
  3. Sinon, nous multiplions le nombre actuel avec la fonction prenant le nombre moins 1 comme paramètre.
  4. Ainsi, cette multiplication se répète jusqu'à ce que nous arrivions au numéro 0. Comme par défaut, nous avons écrit notre sortie de retour pour zéro comme 1, le résultat final serait multiplié par 1.

Sortie :

Fonction récursive en C#

Maintenant, dans le code, je vais remplacer notre paramètre de fonction de num moins 1 par num.  Dans ce cas, la fonction s'appellerait encore et encore et le processus se répéterait.

Code :

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);
}
}

Sortie :

Fonction récursive en C#

Grâce au résultat ci-dessus, nous pouvons clairement voir l'exception de débordement de pile, où la fonction s'appelle à plusieurs reprises. Seule la partie mise en évidence est modifiée par rapport au premier programme.

De la même manière, nous pouvons faire du nombre une valeur saisie par l'utilisateur comme ci-dessous :

Code :

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);
}
}

Sortie :

Fonction récursive en C#

Et si nous donnons zéro comme entrée ? Oui, un serait rendu.

Sortie :

Fonction récursive en C#

Maintenant, et si nous donnons un nombre négatif ?

Sortie :

Fonction récursive en C#

Cela m'a également donné une exception de débordement de pile, car notre fonction de récursion factorielle diminue la valeur du paramètre à chaque exécution. Ainsi, les nombres négatifs seraient réduits à -6, -7, -8 et ainsi de suite. C'est la raison pour laquelle nous optons pour cette exception.

À titre d'exercice, pouvez-vous essayer de créer une fonction récursive pour les nombres négatifs ?

Indice : Nous pouvons prendre une condition préalable d'un nombre inférieur à zéro et en ajouter un à notre paramètre de fonction récursive jusqu'à ce que zéro vienne.

Exemples de fonction récursive en C#

Il existe peu de bons exemples qui peuvent être cités concernant les fonctions récursives :

Nous avons quelques autres endroits où nous pouvons utiliser ces fonctions récursives.

  • Imprimez les nombres à partir d'un point de départ et d'un point final donnés en continu. (Programme ci-dessous)
  • Ajoutez des nombres à partir d'un point de départ donné et arrêtez-vous au point final ou lorsqu'une somme particulière est atteinte.
  • Imprimez les nombres divisés par un nombre particulier dans une plage particulière.
  • Nous souhaitons imprimer n'importe quel nombre de lignes ou de points continus après avoir écrit une phrase et bien d'autres.

Comme vous pouvez le constater, la fonction récursive est similaire à la fonctionnalité d'une boucle, mais où nous appelons la même fonction à plusieurs reprises.

Voyons comment nous pouvons écrire une fonction récursive en ajoutant des nombres en continu jusqu'à ce que le programme trouve le deuxième nombre donné en entrée.

Code :

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;
}
}

Ici, ce que nous avons fait c'est :

  • Nous avons pris deux nombres num1 et num2 via les entrées de l'utilisateur
  • Ajouter une fonction, ajoute les nombres à partir de num1 jusqu'à obtenir le num2.

Par exemple, si je prends num1 = 5 et num2 = 8, alors la somme de sortie que nous obtenons est 5+6+7+8, soit 26.

Sortie :

Fonction récursive en C#

Et si je donne à num1 moins que num2 ?

Sortie :

Fonction récursive en C#

Il en donne comme valeur num1 en premier, nous avons attribué la valeur de somme à la valeur num1 et renvoyé la somme si l'instruction if n'est pas applicable.

Comme exercice, pouvez-vous écrire une fonction récursive pour imprimer « J'aime coder » jusqu'à ce qu'elle respecte une certaine condition ?

Astuce : Nous pouvons suivre la même procédure d'ajout qui est effectuée dans le programme ci-dessus.

Conclusion

Nous avons donc ici avec succès l'exécution de fonctions récursives, comment ces fonctions sont appelées et quelques exemples d'entre elles. Nous avons également appris comment une simple différence dans l'appel d'une fonction peut faire sortir le programme de ses limites et créer une exception.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Fonctions mathématiques en C#Article suivant:Fonctions mathématiques en C#