IT培训网 - IT职场人学IT技术上IT培训网
学Java开发这些知识点你一定要掌握
时间:2021-09-08 22:11:24 来源:编程网 作者: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);}
每期开班座位有限.0元试听抢座开始!
温馨提示 : 请保持手机畅通,咨询老师为您
提供专属一对一报名服务。