2019独角兽企业重金招聘Python工程师标准>>>

递归算法是跟常见的算法思想。使用递归算法,往往可以简化代码编写,提高程序的可读性。但是,不适合的递归往往导致程序的执行效率变低。

一、递归算法基本思想

递归算法即在程序中不断反复调用自身来叨叨求解问题的方法。此处的重点是调用自身,这就要求待求解的问题能够分解为相同问题的一个子问题。这样,通过多次递归调用,便可以完成求解。

在递归方法中,主调方法又是被调方法。执行递归方法将反复调用其自身。每调用一次就进入新的一层。方法的递归调用分为两种情况分别为:

  • 直接递归:即在方法中调用方法本身.
  • 间接递归:即间接的调用一个方法,如func_a调用func_b,func_b又调用func_a间接递归用得不多.

编写递归方法时,必须使用if语句强制方法在未执行递归调用前返回。如果不这样做,在调用方法后,他将永远不会返回。这是一个很容易犯的错误。

二、递归优缺点

1、优点

在方法中使用递归的好处有:程序代码更简洁清晰可读性更好。有的算法用递归表示要比用循环表示简洁精炼,而且某些问题,特别是与人工智能有关的问题,更适宜用递归方法,如八皇后问题、汉诺塔问题等。有的算法,用递归能实现,而且循环不一定能实现

2、缺点

大部分递归例程没有明显的减少代码规模和节省内存空间。递归形式比非递归形式运行速度要慢一些。这是因为附加的方法调用增加了时间开销,例如需要执行一系列的压栈出栈等操作。但在许多情况下,速度的差别不太明显。如果递归层次太深,还可能导致堆栈溢出

三、递归算法实例

    递归算法常用于一些数据计算,或者有明显的递推性质问题。理解递归最常用的一个例子是编写程序求阶乘问题。

阶乘就是一个正整数的阶乘是所有小于及等于该数的正整数,并且0的阶乘为1。

  • 五的阶乘就是:5*4*3*2*1
  • 十的阶乘就是:10*9*8*7*6*5*4*3*2*1
public class algorithm {/*** 递归算法阶乘*/public static int fact(int i){if (i<=1){return 1;}else {return i*fact(i-1);}}public static void main(String[] args) {/*** 递归算法阶乘*/System.out.println(fact(12));}
}

效果如下:

479001600

转载于:https://my.oschina.net/u/3452909/blog/2052696

java算法-递归算法思想相关推荐

  1. java算法的递归问题设计_java算法-递归算法思想

    递归算法是跟常见的算法思想.使用递归算法,往往可以简化代码编写,提高程序的可读性.但是,不适合的递归往往导致程序的执行效率变低. 一.递归算法基本思想 递归算法即在程序中不断反复调用自身来叨叨求解问题 ...

  2. java算法:递归算法

    java算法:递归算法 递归算法时通过解决相同问题的一个或几个小例子来解决问题的算法.在java中,实现递归方法就是调用自身的方法. 例1:阶乘函数递归实现 Java代码 staticintfacto ...

  3. 希尔排序的java算法_Java算法系列篇 【希尔排序】

    什么? 搞Java不会算法? 由于个人兴趣原因以及工作所需,最近了解Java算法的相关案例 及时分享 感兴趣的欢迎交流 希尔排序 描述: 基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直 ...

  4. java实现递归算法_如何在Java中实现二进制搜索算法而无需递归

    java实现递归算法 by javinpaul 由javinpaul 流行的二进制搜索算法的迭代实现,用于在排序数组中查找元素. (An Iterative implementation of the ...

  5. JAVA算法:李白遇花喝酒游戏JAVA DFS 算法设计

    JAVA算法:李白遇花喝酒游戏JAVA DFS 算法设计 看到了这样的一道题目,还挺有意思,可以通过不同的算法设计来求解. 话说大诗人李白,一生好饮.一日,他提着酒壶,从家里出来,酒壶中有酒2斗.他边 ...

  6. 【Java算法之dfs 与bfs详解】

    下次再也不鸽了(つಥ㉨ಥ)つ 我发誓,真的!!! Java算法之dfs 与bfs 1. dfs 1.1 dfs递归 2. bfs 1. bfs常见两类问题 1.1==是否==有路径问题 1.2最短路径 ...

  7. 解读:什么是Java的递归算法?

    Java可以说是使用率非常高的一门编程语言了,在21世纪的今天Java绝对可以说的上是最热门的行业了.Java行业也被誉为IT行业的中流砥柱,是运用范围最为广泛的语言.今天小千就来和大家聊聊什么是Ja ...

  8. java算法计算一元一次方程

    java算法计算一元一次方程是昨年10月写的了,最近想写写算法就把它整理出来了. 核心思想是将方程转化为:aX+b = cX+d 的形式再进行计算,转化的思想是根据符号的优先级一层一层的分割.分割规则 ...

  9. Java算法--第三章--排序(14)概述

    Java算法–第三章–排序(14)概述 排序算法的总结: 一.基础排序-----算法评估等级:O(n²) 1.冒泡 谁大谁上,每一轮都把最大的顶到天花板效率太低O(n2)–掌握swap 2.选择排序, ...

  10. Java算法-排序-选择排序

    昨天写了5大排序的交换排序,女朋友给我一个大大的赞,今天一天激情满满.下班了,有时间整理一下另外的排序算法,今晚就写写选择排序吧 二.选择排序(直接选择排序+堆排序) 1.直接选择排序 直接选择排序的 ...

最新文章

  1. C++11中std::addressof的使用
  2. 从iOS证书申请到签名文件生成
  3. Android艺术——性能优化问题
  4. 聊聊storm TridentBoltExecutor的finishBatch方法
  5. 基于注解进行bean的装配
  6. VMware vSAN 的内部版本号和版本 (2150753)--2020-10-27 更新
  7. JSP中application的用法
  8. Ajax基础之原生js封装
  9. java计算机毕业设计教务排课系统源码+mysql数据库+系统+lw文档+部署
  10. DHCP八种报文详解
  11. 如何批量将 Excel 文档转为 Svg 格式
  12. QT项目实战之翻金币小游戏
  13. CSR867x — 如何修改蓝牙设备名称
  14. django项目 网易云音乐
  15. 从百度识图效果对智能识图的一些思考
  16. 乐讯机器人精简版2016迎春版【隆重发布】
  17. 利用java代码一键生成数据库文档
  18. python字典怎么增加元素_Python字典(dict)增加元素
  19. FreeSWITCH 显示号码
  20. 关于蓝屏错误IRQL_NOT_LESS_OR_EQUAL

热门文章

  1. 设计了一个JavaScript的源代码混淆器
  2. 项目设计----会员充值(基础)
  3. Spring Cloud(Greenwich版)-01-服务生产者与服务消费者
  4. 电商网站前台模板_电商热潮汹涌,兴长信达PEC零售商城系统为企业注入新力量...
  5. RazorPage语法介绍(二)
  6. phpcms加载系统类与加载应用类的区别
  7. c语言下列编程段的错误,C语言编程题目(有错误)
  8. 全网首发:LINUX编译JNA:编译产生libjnidispatch.so
  9. LINUX环境变量environ
  10. marven编译时:<pre>错误: 不允许使用自关闭元素</pre>