- C#程序设计经典300例
- 王骞 陈宇 管马舟编著
- 526字
- 2020-08-28 22:52:01
实例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)。