海阔天空

当前时间为:
欢迎大家来到海阔天空https://www.9713job.com,广告合作以及淘宝商家推广请微信联系15357240395

2020java教程:多级调用以及递归的使用

未分类
2020-08-04 10:05:20
1822677238@qq.com

手机扫码查看

2020java教程:多级调用以及递归的使用

2020java教程:多级调用以及递归的使用

多级调用

public class demo{
public static void main(String[] args){
m1();
}
public static void m1(){
System.out.println(“m1() -start”);
m2();
System.out.println(“m1() -end”);
}
public static void m2(){
System.out.println(“m2() -start”);
System.out.println(“m2() -end”);
}
}
运行结果:
m1()-start
m2()-start
m2()-end
m1()-end

优先执行函数内部代码,结束后,返回到调用处,继续向下执行

无穷递归

public class demo{
public static void main(String[] args){
m1();
}
public static void m1(){
System.out.println(“m1() -start”);
m1();//当函数自己调用自己时,如果没有正确的出口条件,
则会产生无穷递归
System.out.println(“m1() -end”);
}
}
运行结果:
m1()-start
m1()-start
m1()-start
m1()-start
……

Exception in thread “main” java.lang.StackOverflowError 内存溢出

递归

实际开发中,递归可以解决具有既定规律的特定问题

何时使用递归?
当需要解决的问题可以拆分成若干个小问题,大小问题的解决方法相同
有固定规律,函数中自己调用自己

如何正确使用递归?
设置有效出口条件,避免无穷递归

循环阶乘

– 计算5的阶乘:`5!=5*4*3*2*1;`

public class demo{
public static void main(String[] args){
System.out.println(jiecheng(5));
}
public static int jiecheng(int n){
int sum=1;
for(int i=2;i<=n;i++){
sum*=i;
}
return sum;
}
/*
循环计算阶乘较为简单,依次与每个值相乘即可
*/
}

递归阶乘
阶乘的定义: `n!=n*(n-1)*(n-2)*(n-3)…`

1!=1;//1的阶乘就是1
2!=2*1;//2的阶乘是2
3!=3*2;//3的阶乘是6
4!=4*3;//4的阶乘是24
5!=5*4;//3的阶乘是120

– 回归:基于出口的结果,逐层向上回归,依次计算每一层的结果,直至回归到最顶层
– 递进:每一次推进,计算都比上一次变得简单,直至简单到无需继续推进,就能获得结果。也叫到达出口

递归的错误演示

public class demo{
public static void main(String[] args){
System.out.println(jiecheng(1));
}
public static int jiecheng(int n){
retrun n*jiecheng(n-1)
}
}
当n=1时,并没有计算出1!=1
而是继续递进,计算1!=1*0!,
所以导致永远没有出口条件,
则造成无穷递归,内存溢出!
Exception in thread “main” java.lang.StackOverflowError

递归的正确演示

public class demo{
public static void main(String[] args){
System.out.println(jiecheng(5));
}
public static int jiecheng(int n){
if(n==1){
return 1;
}
retrun n*jiecheng(n-1);
}
}

– 注意:所有能以递归解决的问题,循环也能解决。
– 当解决复杂问题时,递归的实现方式更为简单。

 

递归完成斐波那契数列

public class demo{
public static void main(String[] args){
int c=jc(8);
System.out.println(c);
}
public static int jc(int n){
if(n==0){
return 0;
}else if(n==1){
return 1;
}
return jc(n-1)+jc(n-2);
}
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注