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#.
La syntaxe ici est la même que la syntaxe des fonctions de base en C#. Jetons un coup d'oeil ici.
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.
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.
Sortie :
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 :
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 :
Et si nous donnons zéro comme entrée ? Oui, un serait rendu.
Sortie :
Maintenant, et si nous donnons un nombre négatif ?
Sortie :
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.
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.
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 :
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 :
Et si je donne à num1 moins que num2 ?
Sortie :
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.
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!