java递推算法-(每日一题)虚拟机栈溢出的应用场景解析
发布时间:2023-06-15 09:13 浏览次数:次 作者:佚名
一、概述:
Java递归:简单说就是函数自身直接或间接调用函数的本身。
二、应用场景:
若:一个功能在被重复使用,并每次使用时,参与运算的结果和上一次调用有关java递推算法,这时就可以使用递归来解决这个问题。
使用要点:
1java递推算法,递归一定明确条件。否则容易栈溢出。
2,注意一下递归的次数。
三、示例:
最简单的递归演示
public class recursionDemo {
public static void main(String[] args) {
show();
}
private static void show() {
method();
}
private static void method() {
show();
}
}
四、实际示例
我们都知道 6的二进制是110,那么程序是怎么执行的呢?
代码示例:
public static void main(String[] args) {
toBin(6);
}
private static void toBin(int num) {
if (num>0){
//取余
System.out.println(num%2);
toBin(num/2);
}
}
运行过程:
2、递归演示二:计算1-5,求和
public static void main(String[] args) {
//1-5求和
int sum = getSum(5);
System.out.println(sum);
}
private static int getSum(int num) {
int x=9;
if (num==1){
return 1;
}
return num+getSum(num-1);
}
程序运行图:
五、递归的缺点
在使用递归时,一定要考虑递归的次数,负责很容易造成虚拟机 “栈溢出”。
仍然使用上面的求和代码,只是这次将求和基数变为 90000000,看看结果如何
public static void main(String[] args) {
//1-90000000求和
int sum = getSum(90000000);
System.out.println(sum);
}
private static int getSum(int num) {
int x=9;
if (num==1){
return 1;
}
return num+getSum(num-1);
}
果然就造成了虚拟机栈溢出。