递归介绍和利用递归算法求阶乘

题目

  题目:利用递归方法求5的阶乘。

  温馨提示:n=5很容易求解,如果n=20呢?20!已经远远走出抄4字节整型范围,所以需要用8字节整型或双精度浮点型来完成算法。

算法分析

  什么是递归方法?在数学与计算机科学中,递归(Recursion)是指在函数的定义中使用函数自身的方法,直到满足终止条件,返回结果的过程。实际上,递归,顾名思义,其包含了两个意思:,这正是递归思想的精华所在。递就是原问题把要计算的结果传给子问题,归则是子问题求出结果后,把结果层层返回原问题的过程。

递归是一种分而治之、将复杂问题转换为简单问题的求解方法,它具有以下优缺点:

优点:使用递归编写的程序简洁、结构清晰,程序的正确性很容易证明,不需要了解递归调用的细节。

缺点:递归函数在调用的过程中,每一层调用都需要保存临时性变量和返回地址、传递参数,因此递归函数的执行效率低。

递归算法的三要素:

1.大问题可以拆分为若干小问题;

2.原问题与子问题除数据规模不同,求解思路相同;

3.存在递归终止条件。

递归使用场景比较多,当一个功能被重复使用,而每一次使用该功能时的参数不确定,都由上次的功能元素结果来确定。如:求n的阶乘、斐波那契数列、求n个数的最大、青蛙跳台阶问题和汉诺塔问、数制转换、求最大公约数都属于简单递归。

源码实现

利用递归公式fn=fn_1*fn_2求解。

   /**
    * 递归求阶乘
    *
    * @param n 阶乘数
    */
   public static long recursion(long n) {
       long value = 0;
       if (n == 1 || n == 0) {
           value = 1;
       } else if (n > 1) {
           value = n * recursion(n - 1);
       }
       return value;
   }
   
   /**
    * 简化代码流程
    */
   public static long recursionPlus(long num) {
       if (num <= 1) {
           return num;
       }
       return num * recursionPlus(num - 1);
   }
posted @ 2022-12-31 20:19  楼兰胡杨  阅读(156)  评论(0编辑  收藏  举报