首页 > 后端开发 > C#.Net教程 > C# 中的递归函数

C# 中的递归函数

WBOY
发布: 2024-09-03 15:14:33
原创
512 人浏览过

在C#中的递归函数中,递归的意思与英语中的含义相同,准确地说是重复自身。因此,函数的递归性质表示重复执行相同的工作。而且,是的,如果程序处理不正确,它肯定会以连续循环的方式运行程序。我们必须确保在执行这些递归函数时指定适当的条件,否则函数将一次又一次地调用自身,导致程序连续执行。下面让我们继续看看如何在 C# 中创建这些函数。

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);
}
}
登录后复制

让我们看看一步一步的过程。

  1. 首先,我们创建了自己的参数化函数来从主函数获取输入值,我们要计算其阶乘。
  2. 然后,我们创建了一个 if 条件来检查给定的数字是否为零。如果数字为零,那么我们将返回 1 作为默认值。
  3. 否则,我们将当前数字与以数字负 1 作为参数的函数相乘。
  4. 因此,这个乘法会重复进行,直到达到数字 0。默认情况下,我们将零的返回输出写为 1,最终结果将乘以 1。

输出:

C# 中的递归函数

现在,在代码中,我将把函数参数从 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);
}
}
登录后复制

输出:

C# 中的递归函数

通过上面的输出,我们可以清楚地看到堆栈溢出异常,即函数重复调用自身。相对于第一个程序,仅突出显示的部分发生了变化。

以同样的方式,我们可以将数字作为用户输入的值,如下所示:

代码:

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);
}
}
登录后复制

输出:

C# 中的递归函数

如果我们输入零怎么办?是的,一个会被退回。

输出:

C# 中的递归函数

现在,如果我们给出负数怎么办?

输出:

C# 中的递归函数

这也给了我一个堆栈溢出异常,因为我们的阶乘递归函数在每次执行时都会减少其参数值。因此,负数将继续减少为 -6、-7、-8 等。这就是我们出现此异常的原因。

作为练习,你可以尝试为负数创建一个递归函数吗?

提示:我们可以采用小于零的数字作为前提条件,然后在递归函数参数中加一,直到零到来。

C# 中的递归函数示例

关于递归函数,有一些很好的例子可以引用:

我们确实还有其他一些地方可以使用这些递归函数。

  • 从给定的起点和终点连续打印数字。 (节目如下)
  • 从给定的起点开始添加数字,并在终点或达到特定总和时停止。
  • 打印除以任何特定范围内的任何特定数字的数字。
  • 我们想在写完一个句子后打印出任意数量的连续线或点。

正如您所观察到的,递归函数类似于循环的功能,但我们重复调用相同的函数。

让我们看看如何编写一个递归函数来连续添加数字,直到程序找到作为输入给出的第二个数字。

代码:

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 和 num2
  • Add函数,将从num1开始的数字相加,直到得到num2。

例如,如果我取 num1 = 5 和 num2 = 8,那么我们得到的输出总和是 5+6+7+8,即 26。

输出:

C# 中的递归函数

如果我给的 num1 小于 num2 怎么办?

输出:

C# 中的递归函数

它首先给出一些作为 num1 值,我们将 sum 值分配给 num1 值,如果 if 语句不适用则返回 sum。

作为练习,你可以编写一个递归函数来打印“我喜欢编码”,直到它满足特定条件吗?

提示:我们可以按照与上述程序中相同的添加过程进行操作。

结论

至此,我们已经成功了解了递归函数的执行、这些函数的调用方式以及一些示例。我们还了解了函数调用中的一个简单差异如何导致程序运行超出其范围并创建异常。

以上是C# 中的递归函数的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板