递归思想之---阶乘算法

Posted darkqueen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归思想之---阶乘算法相关的知识,希望对你有一定的参考价值。

关于阶乘这里简单说明一下

阶乘是什么?
1 x 2 x 3 x 4 x 5 = 5!
这里的5!就称为5的阶乘,之所以称为阶乘是因为乘数呈阶梯状递减而得名,如下:
5! = 5 x 4 x 3 x 2 x 1 = 120
4! = 4 x 3 x 2 x 1 = 24
3! = 3 x 2 x 1 = 6
2! = 2 x 1 = 2
1! = 1 = 1
0! = 1
注意0的阶乘0!被定义为1,这是数学里的规定。
n的阶乘如下:
n!= n x (n-1) x (n-2) x … x 2 x 1
很显然n!是一种递推公式,也符合递归思维,因此有:
当n=0时,n! = 1 ;
当n>=1时,n x (n-1)!
可以发现它使用了阶乘(n-1)!来定义阶乘n!,是不是跟汉诺塔很相似?没错,确实是递归思维的体现。
ok~,关于阶乘我们就简单了解这些。

 

??递归算法的定义(从程序的角度):任何调用自身函数的过程都可以称为递归算法(前面实现的汉诺塔程序就是一个很好的例子)。这里需要注意的是递归必须满足以下两个条件:

  • ①边界条件:至少有一条初始定义是非递归的,如汉诺塔的H(0)=0,阶乘的0!=1。
  • ②递归通式:由已知函数值逐步计算出未知函数值,如汉诺塔的H(0)=0,可以推算出H(1)=H(0)+1+H(0)。

边界条件和递推通式是递归定义的两个基本要素,缺一不可,并且递归通式必须在有限次数内运算完成达到边界条件以保证能够正常结束递归,得到运算结果。好~,以上便是递归的定义,还是那句话理解好递归思维(复杂问题简单化)才是重点!

以上是关于递归思想之---阶乘算法的主要内容,如果未能解决你的问题,请参考以下文章

非递归的o(n)的求n个数里面第k大数的算法

Java算法——递归思想

课后作业1

聊聊算法——回溯算法

聊聊算法——回溯算法

阶乘之算法