Java递归的概念是什么与如何使用
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍"Java递归的概念是什么与如何使用"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Java递归的概念是什么与如何使用"文章能帮助大家解决问题。
千家信息网最后更新 2025年01月19日Java递归的概念是什么与如何使用
这篇文章主要介绍"Java递归的概念是什么与如何使用"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Java递归的概念是什么与如何使用"文章能帮助大家解决问题。
一、递归的概念
1.什么是递归?
递归就是:方法自己调用方法的过程。
使用递归有两个前提条件:
1.有一个趋近与终止的条件。
2.自己调用自己 。
如何实现递归?
最重要的方式是:实现递归,需要去推导出一个递推公式。
思考递归的方式:横向思考,根据递推公式来思考。
代码的执行:是纵向执行。
2.递归讲解
首先看下面代码:
public class TestDemo { public static void func(){ func(); //自己调用自己本身 } public static void main(String[] args) { func(); }}
上图代码就是一个简单的递归。
我们再来看一下这个代码的运行结果,
画图讲解:
对于上图这个递归来说,根本没有一个趋于终止的条件,所以这个函数会无休止的递归下去。每次递归都要在栈上开辟内存,一直在栈上开辟内存,总有一次会栈超出。
老铁们要记住:一旦你写的递归有问题,如果是边界没找对一定会报一个
,如果报了这个错误那么一定是你的终止条件有错误,或者是没写终止条件导致了你在递归的过程当中深度过大,最终栈溢出。
如果想要让上述代码正确,我们需要给它加入一个终止条件。
正确代码如下:
public class TestDemo { public static void func(int n){ if(n == 1) return; func(n -1); } public static void main(String[] args) { func(3); }}
下面会通过简单的例题让大家更加深入的了解递归
二、递归的使用
例题:递归方式求n的阶乘 画图分析:
实现代码 :
public class TestDemo { public static int fac(int n){ if(n == 1) { return 1; } int tmp = n * fac(n - 1); return tmp; } public static void main(String[] args) { System.out.println(fac(5)); }}
代码画图讲解:
例题:求n的和
画图分析:
实现代码:
第一种写法:public class TestDemo { public static int sumAdd(int n){ if(n == 1) { return 1; } int tmp = n + sumAdd(n - 1); return tmp; } public static void main(String[] args) { System.out.println(sumAdd(3)); }} 第二种写法:public class TestDemo { public static int sumAdd(int n){ if(n == 1) { return 1; } return n + sumAdd(n -1); } public static void main(String[] args) { System.out.println(sumAdd(3)); }}
例题:递归实现按照顺序打印每一位的数字
画图分析:
实现代码:
public class TestDemo { public static void print(int n){ if(n < 10){ System.out.print(n+" "); }else{ print(n/10); System.out.print(n+" "); } } public static void main(String[] args) { print(1234); }}
例题:写一个递归方法,输入一个非负整数,返回组成它的数字之和。例如:输入1729,则应该返回1+7+2+9
实现代码:
public class TestDemo { public static int sumEveryone(int n){ if(n < 10){ return n; }else{ return n + sumEveryone(n/10); } } public static void main(String[] args) { System.out.println(sumEveryone(7910)); } }
例题:求第n个斐波那契数是几
画图分析:
实现代码:
第一种方法:递归public class TestDemo { public static int fib(int n){ if(n == 1 || n == 2){ return 1; }else{ return fib(n-2)+fib(n-1); } } public static void main(String[] args) { System.out.println(fib(5)); } 第二种方法:叫做循环(迭代)实现 public static int fib2(int n){ if(n == 1 || n==2){ return 1; } int f1 = 1; int f2 = 1; int f3 = 0; for (int i = 3; i < n; i++) { f3 = f1+f2; f1 = f2; f2 = f3; } return f3; } public static void main(String[] args) { System.out.println(fib2(45)); }
关于"Java递归的概念是什么与如何使用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
递归
代码
例题
方法
条件
概念
分析
方式
知识
过程
上图
公式
内存
写法
就是
数字
行业
错误
问题
输入
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库工程师需要学习什么
数据库工程师 招聘
软件开发过程的成果物管理
河南明德软件开发有限公司
备份软件是网络安全产品吗
惠州物联网软件开发价格
小学校园网络安全教育内容
周鸿祎说网络安全不挣钱
数据库授权之后属性不变
蒂森电梯蓝牙服务器制作
产品物料组成清单管理数据库
华为软件开发对应测试
软件开发企业信息安全目标
淄博移动城管软件开发系统
网络技术有限公司是干什么
如何删除表数据库表
时尚网络技术培训热线电话
wow 好的服务器
电脑服务器就是主机机箱吗
湖南通讯软件开发应用
网络安全贺卡怎么做
公安网络安全大学生心得体会
计算机网络技术第三章的答案
企业开展网络安全教育
海曙敏捷软件开发企业
建立数据库注意事项
基于神经网络技术
neo3数据库
临沂有卖金融服务器的吗
从小程序与数据库链接