Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 递归-理解返回 使用系统; 使用System.Collections.Generic; 使用System.Linq; 名称空间返回 { 班级计划 { 静态void Main(字符串[]参数) { 控制台写入线(阶乘(10)); Console.WriteLine(test()); } 私有静态int-Factorial(int-factorialNum) { 如果(factorialNum_C# - Fatal编程技术网

C# 递归-理解返回 使用系统; 使用System.Collections.Generic; 使用System.Linq; 名称空间返回 { 班级计划 { 静态void Main(字符串[]参数) { 控制台写入线(阶乘(10)); Console.WriteLine(test()); } 私有静态int-Factorial(int-factorialNum) { 如果(factorialNum

C# 递归-理解返回 使用系统; 使用System.Collections.Generic; 使用System.Linq; 名称空间返回 { 班级计划 { 静态void Main(字符串[]参数) { 控制台写入线(阶乘(10)); Console.WriteLine(test()); } 私有静态int-Factorial(int-factorialNum) { 如果(factorialNum,c#,C#,让我们尝试执行调用代码: using System; using System.Collections.Generic; using System.Linq; namespace Return { class Program { static void Main(string[] args) { Console.WriteLine(Factorial(10)); Console.WriteLine(

让我们尝试执行调用代码:

using System;
using System.Collections.Generic;
using System.Linq;

namespace Return
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Factorial(10));
            Console.WriteLine(test());
        }

        private static int Factorial(int factorialNum)
        {
            if (factorialNum <= 1)
            {
                return 1;
            }
            return factorialNum * Factorial(factorialNum - 1);
        }

        public static int test()
        {
            return 1;
        }
    }
}

当为4调用此方法时,返回语句将为

Factorial(4)
所以我们现在必须调用阶乘(3),我们将得到

4 * Factorial(3)
最后

在最后一点,阶乘(1)将返回1,结果为:

2 * Factorial(1)
将被传递到3*阶乘(2),并将成为

2 * 1
这将在末尾传递到4*阶乘(3):

现在这个方法返回24,这是4的阶乘


您必须注意调用堆栈。它会在基本情况下停止方法的递归调用
factorialNum当您运行Factorial(10)时,您会得到数字3628800,因为10!等于3628800。如果您运行代码,Factorial()返回当前数字*当前数字-1。因此它返回10*9*8*7*6*5*4*3*2*1=3628800

事实上,在阶乘(10)的末尾返回1,但这个1只需乘以前面的数字即可

要使控制台返回1,必须运行阶乘(1),因为1!=1

4 * 3 * 2 * 1
在上面的示例中,
factorialNum
将始终为10,因为这是输入值,并且将返回
10*Factorial(9)

然后在下一个循环中,它将是
9*Factorial(8)
等等。因此最终返回值将是
10*9*8*7*6*5*4*3*2*1

您的思维过程和困惑不清楚。您得到了什么,以及您为什么不认为应该得到它?示例帮助:)您调用
Factorial(10)
那么为什么您希望返回
1
?相反,它返回
10*阶乘(9)
,因为
10
不小于或等于
1
如果(factorialNum尝试调试Factorial方法,并将1和2传递给它。这将有助于理解它是如何工作的好的,下面是我的思考过程。如果我创建一个方法,它将返回1。即:`` public static int test(){return 1;}“``和Console.WriteLine这个方法,然后它会说1。如果我把它改成3,它会写3,依此类推。所以对于另一个方法,我说我想*它和factorialNum-1。然后返回它。但是如果它是1,它应该返回1。不管我在里面放了哪个int,它最终都会=1。因为我们说的是factorialNum-1但为什么它最终是1。它返回1,为什么控制台中没有输出。WriteLine 1,因为我们返回1Okay。所以,``return factorialNum*Factorial(factorialNum-1)``会一直“添加”到它自己。我尝试将返回1更改为2。结果乘以2。所以我猜它只是说。“嘿,当我们把所有东西都乘以时,我们想把它乘以1”这理解正确吗?@SonnyChaudhry对不起,我不明白你的问题。
3 * 2 * 1
4 * 3 * 2 * 1
return factorialNum * Factorial(factorialNum - 1);