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

Java中的递归(recursion)方法----简单介绍加演示

博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
👉点击跳转到网站

递归方法简介:

一个方法体内调用它自身,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。

  1. 方法递归包含了一个隐式循环,它会重复执行某段代码,但是这种执行无需循环控制。
  2. 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。
  3. 执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
  4. 方法的局部变量是独立的,不会相互影响, 比如n变量
  5. 如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据.
  6. 递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError,死龟了
  7. 当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。

1.用递归求一个1-100的和

package demo;public class demo1 {public static void main(String[] args) {int n=100;demo1 demo1 = new demo1();int sum = demo1.getSum(n);System.out.println("1-100的和为:"+sum);}//递归求和private int getSum(int n){  //当n==3时if (n==1){return 1;}else {return n+getSum(n-1);  //当n=3时,返回结果为3,n=2时,返回结果为2。n=1时,返回结果为1}}
}

输出结果

Task :demo1.main()
1-100的和为:5050

2.10的阶乘10!懂得其中的逻辑就行,不用太去深究

package demo;public class demo2 {public static void main(String[] args) {int n=10;demo2 demo2 = new demo2();int aa = demo2.factorial(n);System.out.println("10的阶乘为:"+aa);}public int factorial(int n){if (n==1){return 1;}else {return n * factorial(n-1);}}
}

输出结果

Task :demo2.main()
100的阶乘为�?3628800

阶乘具体图解如下:
在这里插入图片描述

打印问题:

public class RecursionTest {public static void main(String[] args) {test(4);}public static void test(int n) {if (n > 2) {test(n - 1);}System.out.println("n=" + n);}
}

输出结果如下:

n=2
n=3
n=4

具体图解如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/cc739e6ed8014d32883deb7bd9d91f1b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Lev5a6H,size_20,color_FFFFFF,t_70,g_se,x_

递归的练习一
在这里插入图片描述
代码如下:

public class RecursionExercise01 {public static void main(String[] args) {T t = new T();int n = 7;int res = t.fibonacci(n);if (res != -1) {System.out.println("当n=" + n + " 对应的斐波那契数= " + res);}}
}class T {public int fibonacci(int n) {if (n >= 1) {if (n == 1 || n == 2) {return 1;} else {return fibonacci(n - 1) + fibonacci(n - 2);}} else {System.out.println("要求输入的n>=1 的整数");return -1;}}
}

输出结果如下:

当n=7 对应的斐波那契数= 13

具体分析图解如下:

在这里插入图片描述
递归练习二
在这里插入图片描述
具体代码如下:

public class Recursion02 {public static void main(String[] args) {//思路分析://1.day=10 有一个桃子//2.day=9(day10+1)*2//3.day=8(day9+1)*2 个桃子//4.day=7(day8+1)*2 个桃子//规律:前一天的桃子=(后一天的桃子+1)*2A a = new A();int peachNum = a.peach(8);if (peachNum != -1) {System.out.println(peachNum);}}
}class A {public int peach(int day) {if (day == 10) {return 1;} else if (day >= 1 && day <= 9) {return (peach(day + 1) + 1) * 2;} else {System.out.println("day在1-10");return -1;}}
}

输出结果如下:

10
http://www.lryc.cn/news/2418633.html

相关文章:

  • win7 32位系统中xlive.dll缺失,如何有效解决?
  • 移动磁盘已用空间0字节要如何办啊
  • 金山卫士开源了
  • js函数明明定义了却报未定义错误
  • Flash player debug版下载
  • Opengl es2.0 学习笔记(一)初始化
  • Android studio4.1 构建项目遇到的一些问题总结
  • 诺基亚808 PureView
  • Ubuntu10.04下载与安装
  • 浏览器安全之网页挂马实战 ——合天网安实验室学习笔记
  • Apple的山狮(Mountain Lion)
  • 分享88个企业政府PHP源码,总有一款适合你
  • 飞腾固件在线更新
  • Eclipse篇
  • 汇编堆栈平衡的几种方式
  • 计算机表演活动全国,威盛中国芯计算机表演赛启动线下活动
  • Java项目:手机商城系统(java+Springboot+SSM+HTML+Layui+thymeleaf+mysql)
  • 云计算与虚拟化技术详解
  • canvas绘制简单动画和本地储存
  • WinForm中常用控件
  • Discuz!教程之Discuz!X2.5版本安装一些插件显示500错误,或页面打不开的问题修复
  • 新浪微博开放平台深度历险
  • ipad air1 12.5.5 checkra1n 越狱+绕过ID
  • JAVA代码优化:记录日志
  • 不得不使用的百度快照优化seo技巧
  • Zblog主题模板:Zblog响应式CMS轻主题博客模板
  • Android 客户端起HttpServer NanoHttpd
  • SQLServer · BUG分析 · Agent 链接泄露分析(转载)
  • ibmt41 安装linux系统,哥我决意为IBM T41 装WIN7的决心已经到了全人类都无法阻止的地步!...
  • struts2 通配符的配置方式