首页 > 编程语言 >递归介绍和利用递归算法求阶乘

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

时间:2022-12-31 20:34:33浏览次数:38  
标签:递归 value 问题 算法 long 阶乘

题目

  题目:利用递归方法求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);
   }

标签:递归,value,问题,算法,long,阶乘
From: https://www.cnblogs.com/east7/p/17017196.html

相关文章

  • JAVA经典算法分析
      算法分析是对一个算法需要多少计算时间和存储空间作定量的分析。算法(Algorithm)是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法。在计算机科学中,算......
  • 雪花算法
    雪花算法packagesnowflakeimport( "time" sf"github.com/bwmarrin/snowflake")varnode*sf.NodefuncInit(startTimestring,machineIDint64)(errerror......
  • 代码随想录算法训练营第四天
    今日刷题4道:24.两两交换链表中的节点19.删除链表的倒数第N个节点面试题02.07.链表相交142.环形链表II。● 24.两两交换链表中的节点题目链接/文章讲解/视频......
  • 【BP回归预测】基于遗传算法优化BP神经网络GA-BP实现光伏出力预测附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 类欧几里得算法学习笔记
    题目求\(f(a,b,c,n)=\sum\limits_{i=0}^n\lfloor\frac{ai+b}c\rfloor\)题解当\(a\gec\)或\(b\gec\)时,\(\begin{aligned}\sum\limits_{i=0}^n\lfloor\frac{ai+b......
  • 做算法的这一年——2022年个人年终总结
    做算法的这一年——2022年个人年终总结前言​ 按照往年的惯例和园子的规矩,随着网易云音乐以及众多App的个人使用报告陆续出来,也到了自己该做个全年复盘总结的时候了。这......
  • 算法刷题 Day 4 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.0
    24.两两交换链表中的节点用虚拟头结点,这样会方便很多。Tips:注意先把边界条件排除,然后注意可能会出现null的情况。我的题解:/***Definitionforsingly-linked......
  • 遗传算法解决函数优化问题
    遗传算法解决函数优化问题作者:Cukor丘克环境:MatlabR2020a+vscode为什么要学习遗传算法为什么要学习遗传算法,或者说遗传算法有什么厉害的地方。例如求解以下函......
  • MATLAB笔记[3]-MPPT算法
    保命声明:笔者代码能力有限,若行文中有错漏之处欢迎大家指出。MPPT算法[https://ww2.mathworks.cn/solutions/power-electronics-control/mppt-algorithm.html?s_tid=srcht......
  • 每日算法之字符流中第一个不重复的字符
    JZ75字符流中第一个不重复的字符题目请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"......