当前位置: 首页 > article >正文

Java中的递归算法

递归调用:方法自己调用自己的现象就称为递归。

通俗的来说就是方法调用其本身!!!!!!!!!!

递归有三大要素:
1.递归出口

2.参数

3.递归方法

递归的分类:

  • 递归分为两种,直接递归和间接递归。

  • 直接递归称为方法自身调用自己。

  • 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。

注意事项

  • 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。

  • 在递归中虽然有限定条件,但是递归深度不能太深,否则效率低下,或者也会发生栈内存溢出。

    • 能够使用循环代替的,尽量使用循环代替递归

案例:计算斐波那契数列(Fibonacci)的第n个值,斐波那契数列满足如下规律,

1,1,2,3,5,8,13,21,....

即从第三个数开始,一个数等于前两个数之和。假设f(n)代表斐波那契数列的第n个值,那么f(n)满足:

f(n) = f(n-2) + f(n-1);

package com.atguigu.test07.recursion;public class FibonacciTest {public static void main(String[] args) {FibonacciTest t = new FibonacciTest();//创建FibonacciTest的对象,目的是为了调用f方法for(int i=1; i<=10; i++){System.out.println("斐波那契数列第" +i +"个数:" + t.f(i));}System.out.println(t.f(20));//6765   }//使用递归的写法int f(int n){//计算斐波那契数列第n个值是多少if(n<1){//负数是返回特殊值1,表示不计算负数情况return 1;}if(n==1 || n==2){return 1;}return f(n-2) + f(n-1);}
}
package com.atguigu.exer.recursion;public class FibonacciTest {public static void main(String[] args) {FibonacciTest t = new FibonacciTest();//创建FibonacciTest的对象,目的是为了调用f方法for(int i=1; i<=10; i++){System.out.println("斐波那契数列第" +i +"个数:" + t.fValue(i));}System.out.println(t.fValue(20));//6765}//不用递归int fValue(int n){//计算斐波那契数列第n个值是多少if(n<1){//负数是返回特殊值1,表示不计算负数情况return 1;}if(n==1 || n==2){return 1;}//从第三个数开始,  等于 前两个整数相加int beforeBefore = 1; //相当于n=1时的值int before = 1;//相当于n=2时的值int current = beforeBefore + before; //相当于n=3的值//再完后for(int i=4; i<=n; i++){beforeBefore = before;before = current;current = beforeBefore + before;/*假设i=4beforeBefore = before; //相当于n=2时的值before = current; //相当于n=3的值current = beforeBefore + before; //相当于n = 4的值假设i=5beforeBefore = before; //相当于n=3的值before = current; //相当于n = 4的值current = beforeBefore + before; //相当于n = 5的值....*/}return current;}}

http://www.lryc.cn/news/2414373.html

相关文章:

  • 集线器、交换机、路由器工作原理区别
  • [机器学习笔记] 混淆矩阵(Confusion Matrix)
  • forward和redirect的区别
  • db4o学习笔记(四)、db4o查询详解续
  • VMware虚拟机安装windows server 2012 R2教程(图文版 超详细!)
  • Visual Studio .NET 2003无法创建或打开应用程序。问题很可能是因为本地Web服务器上没有安装所需的组件
  • java filter mapping_Java Servlet Filter的两种映射方式
  • 天堂地狱启示录
  • 商城系统商业授权的那些事儿
  • 简析HTML七种网页加密解密方法
  • STM8S自学笔记-005 延时函数的3种方式
  • 泰坦尼克号建模分析-你能活下来吗?
  • 高分一号PMS相机多光谱和全色数据预处理
  • VUE通用后台管理系统(一)登录
  • python入门教程(非常详细),从零基础入门到精通,看完这一篇就够了
  • LVM----扩展/缩小VG与扩展/缩小LV
  • 多目标优化算法平台PlatEMO的基本使用方法
  • Java 反射 java.lang.reflect包
  • Hive--数据抽样的常用三种方法(随机/数据块/分桶)
  • 【echarts】使用心得之ChinaMap
  • DL2-TensorFlow2.0编程基础
  • NetBeans配置Tomcat
  • 中国排名前100的IT公司
  • SVN入门教程
  • [转]Centos5 下安装/配置lvm使用reiserfs文件系统
  • 北京公安局出入境管理处地址
  • Spring配置文件applicationContext.xml中bean>>property>>name属性的含义
  • Android和JXTA协议模型的无线D2D通信技术
  • MFC控件(四)(图像列表控件CImageList)
  • 「Linux」- 平均负载(Load Average) @20210210