在C#中的递归函数中,递归的意思与英语中的含义相同,准确地说是重复自身。因此,函数的递归性质表示重复执行相同的工作。而且,是的,如果程序处理不正确,它肯定会以连续循环的方式运行程序。我们必须确保在执行这些递归函数时指定适当的条件,否则函数将一次又一次地调用自身,导致程序连续执行。下面让我们继续看看如何在 C# 中创建这些函数。
这里的语法与C#中的基本函数语法相同。我们来看看吧。
这里没有特殊的语法,但我们可以观察到函数在提供返回结果时调用自身。而且我们在将这些参数值传递到递归函数时必须非常小心,因为显然我们不希望代码不断运行。
在上面的语法中,我们只能在 return 语句中调用函数。相反,我们甚至可以将递归函数的返回值分配给一个变量并返回该变量。
这里让我们采用默认的问题陈述,因式分解,来生成递归函数。
代码:
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); } }
让我们看看一步一步的过程。
输出:
现在,在代码中,我将把函数参数从 num - 1 替换为 num。 在这种情况下,该函数将一次又一次地调用自身,并且该过程将重复。
代码:
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); } }
输出:
通过上面的输出,我们可以清楚地看到堆栈溢出异常,即函数重复调用自身。相对于第一个程序,仅突出显示的部分发生了变化。
以同样的方式,我们可以将数字作为用户输入的值,如下所示:
代码:
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); } }
输出:
如果我们输入零怎么办?是的,一个会被退回。
输出:
现在,如果我们给出负数怎么办?
输出:
这也给了我一个堆栈溢出异常,因为我们的阶乘递归函数在每次执行时都会减少其参数值。因此,负数将继续减少为 -6、-7、-8 等。这就是我们出现此异常的原因。
作为练习,你可以尝试为负数创建一个递归函数吗?
提示:我们可以采用小于零的数字作为前提条件,然后在递归函数参数中加一,直到零到来。
关于递归函数,有一些很好的例子可以引用:
我们确实还有其他一些地方可以使用这些递归函数。
正如您所观察到的,递归函数类似于循环的功能,但我们重复调用相同的函数。
让我们看看如何编写一个递归函数来连续添加数字,直到程序找到作为输入给出的第二个数字。
代码:
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; } }
在这里,我们所做的是:
例如,如果我取 num1 = 5 和 num2 = 8,那么我们得到的输出总和是 5+6+7+8,即 26。
输出:
如果我给的 num1 小于 num2 怎么办?
输出:
它首先给出一些作为 num1 值,我们将 sum 值分配给 num1 值,如果 if 语句不适用则返回 sum。
作为练习,你可以编写一个递归函数来打印“我喜欢编码”,直到它满足特定条件吗?
提示:我们可以按照与上述程序中相同的添加过程进行操作。
至此,我们已经成功了解了递归函数的执行、这些函数的调用方式以及一些示例。我们还了解了函数调用中的一个简单差异如何导致程序运行超出其范围并创建异常。
以上是C# 中的递归函数的详细内容。更多信息请关注PHP中文网其他相关文章!