本文实例讲述了C#采用递归实现阶乘的方法,供大家参考之用。通常来说,如果想实现一个阶乘,比如6 * 5 * 4 * 3 * 2 * 1,首先想到的可能是循环遍历。
如下示例所示:
class Program { static void Main(string[] args) { Console.WriteLine("请输入一个数"); int number = Convert.ToInt32(Console.ReadLine()); double result = JieCheng(number); Console.WriteLine(number.ToString() + "的阶乘结果是:" + result.ToString()); Console.ReadKey(); } public static double JieCheng(int number) { if (number == 0) { return 0; } //初始值必须设置为1 double result = 1; for (int i = number; i >= 1; i--) { result = result*i; } return result; } }
但以上的阶乘还有一种实现方式:6 * (6-1) * (6-2) * (6-3) * (6-4) * (6-5) 或 6 * (6-1) * (5-1) * (4-1) * (3-1) * (2-1),也就是说后面数总是由前面的数减1得到的。
当实现的逻辑相同,且内部递归方法的参数可以由外部递归方法的参数,经过某种算法而获得,这正是递归登场的时候。
实现代码如下:
public static double JieCheng(int number) { if (number == 0) { return 1; } return number * JieCheng(number - 1); }
希望本文所述实例对学习算法的朋友能有所帮助。
问题内容: 我正在使用《 Java:完整参考》这本书来学习Java。目前,我正在从事递归主题。 请注意: 关于stackoverflow也有类似的问题。我搜索了它们,但没有找到解决问题的方法。我对以下程序中的逻辑感到困惑。 如果我运行下面的程序,它将产生正确的输出,但是我不理解其逻辑。 我不理解以下行中的逻辑: result = fact(n-1)* n; 据我所知,如果我们按以下程序所示传递n
本文向大家介绍C++实现递归函数的方法,包括了C++实现递归函数的方法的使用技巧和注意事项,需要的朋友参考一下 递归函数通俗来讲就是自己调用自己本身。这样有很大的好处,代码很方便简洁,把复杂的有规律的运算交给计算机去做。 1、首先定义问题。递归函数(recursion)需要设置一个函数,然后再可以循环往复的执行下去。 2、把问题换成公式。 如把阶乘之和定义为f(n)=n*f(n-1)。也就是说n*
问题内容: 这两种获取阶乘(循环与递归)的方法中哪种更有效/更快?如果可以改进,那又如何呢? 语言:Java 问题答案: 因为没有方法调用的开销,所以for循环将更加有效。(作为一般规则,循环几乎总是比递归更有效率) 为了解释为什么您必须深入了解调用方法和调用堆栈时发生的事情。 基本上,当您调用一个方法时,它需要一些空间来使用(例如其局部变量之类的东西),它还需要空间以用于将传入的参数传递给它,并
本文向大家介绍Java中的递归详解(用递归实现99乘法表来讲解),包括了Java中的递归详解(用递归实现99乘法表来讲解)的使用技巧和注意事项,需要的朋友参考一下 1:普通实现99乘法表太简单,是个程序员都会,实现如下: 2:用递归方式实现 99乘法表 代码如下: 递归的方式调用图示: 每一个方法的调用都会产生一个栈帧,压入到方法栈,当递归调用的时候,方法栈中栈帧的图示和上图类似。 去掉方法中栈帧
我尝试编写一个递归方法,将从0到输入数字的所有阶乘值相加,并将结果作为双精度返回。我使用递归阶乘方法来计算各个阶乘。但我不明白如何使所有阶乘求和的方法成为递归方法,使用两个递归而不是一个递归和for循环。 这是密码!
本文向大家介绍Java算法之递归算法计算阶乘,包括了Java算法之递归算法计算阶乘的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享的java算法计算阶乘,在学习Java课程时经常会遇到求阶乘问题,今天接跟大家一起探讨一下 代码如下: 运行结果: