位置:学校首页 > 学校动态>郑州软件开发java培训学校一览表
郑州软件开发java培训学校一览表,郑州百知IT设计培训费用价格适中,物有所值,专注培养设计实战型人才,基础入门学得会!
java程序员必备的基础知识_java面向对象之方法的递归!学习Java的学子们,赶紧来看看吧,学习需要努力,但也需要掌握知识点!
a、方法调用
一个方法中也是可以调用另一个方法的。
我们完全可以把加油和发动分解成两个动作啊,理论上,这也是合理的,因为这确实是两个动作。
//发动的方法
public void run(){
addGasoline();
System.out.println("汽车启动啦!");
}
//加油的方法
public void addGasoline(){
System.out.println("加油啦!");
}
b、递归调用
问题来了,方法自己能不能够调用自己的方法
//发动的方法
public void run(){
run();
System.out.println("汽车启动啦!");
}
这玩意直接报错了:
Exception in thread"main"
java.lang.StackOverflowError
at com.ydlclass.Car.run(Car.java:16)
at com.ydlclass.Car.run(Car.java:16)
at com.ydlclass.Car.run(Car.java:16)
说是栈内存溢出了:
什么原因呢?每个方法的创建都会创建一个【栈帧】压入栈中。
所以,在使用递归的时候一定要注意,用不好,会发生栈内存溢出的问题。
那怎么用好递归呢?
答案是:在合适的地方退出递归调用,接下来举两个例子。
①、斐波那切数列
斐波那契数列指的是这样一个数列0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……
特别指出:第0项是0,第1项是个1。
这个数列从第三项开始,每一项都等于前两项之和。
求:在斐波那契数列中第number个数字是多少?
分析:我们知道除了第0个和第1个,【第number个数字】一定等于【第number-1个数字】和【第number-2个数字】之和
public long fibonacci(long number){return fibonacci(number-1)+fibonacci(number-2);}
上边这个递归永远退不出去,应该判断number在0和1的时候,它并不需要递归,修改如下:
public long fibonacci(long number){if((number==0)||(number==1))return number;elsereturn fibonacci(number-1)+fibonacci(number-2);}Test test=new Test();long result=test.fibonacci(5);System.out.println(result);结果:5
【注意】:递归,一定要有合理的退出机制。
②、阶乘(factorial)
5的阶乘=5*4*3*2*1=120
非递归方式:
public long factorial(long number){long result=1;for(int i=1;i<=number;i++){result*=i;}return result;}
递归方式:
核心思路:5的阶乘=4的阶乘*5=3的阶乘*4*5=2的阶乘*3*4*5=1*2*3*4*5;
public long factorial(long number){if(number<=1)return 1;return number*factorial(number-1);}