实例017 求解正整数的阶乘——函数的递归调用及值传递

【实例描述】

本实例主要介绍函数的递归调用,还介绍了函数参数值传递及函数值的返回。该实例从控制台输入一个正整数,然后通过计算阶乘的函数来计算该正整数的阶乘,最后从控制台输出结果,效果如图2-17所示。

图2-17 求解正整数的阶乘

【实现过程】

(1)创建一个名为Factorial的控制台应用程序。

(2)定义一个名为Factorial的函数,用于计算正整数的阶乘,代码如下:

    /// 计算n的阶乘
    /// <param name="n">需要计算阶乘的正整数</param>
    /// <returns>n的阶乘</returns>
    static decimal Factorial(decimal n)
    {
        if (n == 1) return 1;                   //将1作为函数返回值
        else return n * Factorial(n - 1);       //计算n乘以n-1的阶乘,并作为参数返回值
    }

(3)从控制台输入一个正整数,并输出其阶乘,在main函数中添加代码如下:

    Console.WriteLine("请输入一个整数:");
    decimal number = decimal.Parse(Console.ReadLine());
    Console.WriteLine("{0}的阶乘为{1}", number, Factorial(number));

【代码解析】

本实例代码利用函数的递归调用计算正整数的阶乘,函数的递归调用即为函数对其自身进行调用。实例代码中定义了一个名为Factorial的函数,该函数需要传入一个decimal类型的参数,该参数为值传递。对于函数参数中值类型的参数,如果不加ref关键字,则为值传递。Factorial函数的返回值也是一个decimal类型。

实例中求解n的阶乘的算法思想为:如果n为1,则n的阶乘也为1,Factorial函数返回值为1;如果n大于1,则n的阶乘可以转化为求解n乘以n−1的阶乘,Factorial函数的返回值为n*Factorial(n−1)。