开发工具与关键技术:eclipse java
作者:黄济民
撰写时间:2021.5.25
递归,就是在运行的过程中调用自己。构成递归需具备的条件:
1.子问题须与原始问题为同样的事,且更为简单;
2.不能无限制地调用本身,须有个出口,化简为非递归状况处理。在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况:
3.下面是递归的使用与面试题:
package com.hjm.dome;
/**
- @author Rmin
- 关于方法的递归调用
-
1.什么是递归?
-
方法自身调用自身。
-
a(){
-
a();
-
}
-
2.递归是很耗费栈内存的,递归算法可以不用的时候尽量别用。
-
3.以下程序运行的时候发生这样的一个错误【不是异常,是错误Error】:
-
Exception in thread "main" java.lang.StackOverflowError
-
栈内存溢出错误。
-
错误发生无法挽回,只有一个结果,就是JVM停止工作。
-
4.递归必须有结束条件,没有结束条件一定会发生栈内存溢出错误
-
5.递归即使有了结束条件,即使结束条件是正确的,也可能会发生栈内存溢出错误
-
因为递归的太深了
-
注意:
-
递归可以不使用尽量别用
-
但是有些情况下该功能的实现必须依靠递归方式。例如:目录拷贝。
*/
public class RecursionText01 {
//主方法
public static void main(String[] args) {
System.out.println("main begin");
//调用doSome方法
doSmon();
System.out.println("main over");
}
//以下的代码片段虽然只有一份
//但是可以被重复的调用,并且只要调用doSome方法就会在栈内存中分配一块所属的内存空间。
public static void doSmon() {
System.out.println("main begin");
doSmon();//这行代码不结束,下一行程序是不能执行的
System.out.println("main over");
}
}
package com.hjm.dome;
/**
- @author Rmin
- 先不使用递归,计算N的阶乘
- 5的阶乘:
-
5 * 4 * 3 * 2 * 1
*/
//public class RecursionText04 {
//
// public static void main(String[] args) {
//
// int number = 5;
// int retValer = method(number);
// System.out.println(retValer);//120
// }
//
// public static int method(int number) {
//
// int result = 1;
//
// for (int i = number; i > 0; i–) {//5 4 3 2 1
// result *= i;
// }
//
// return result;
// }
//
//}
//递归方式 这也是一道面试题
public class RecursionText04 {
public static void main(String[] args) {
int number = 5;
int retValer = method(number);
System.out.println(retValer);//120
}
public static int method(int number) {
if (number == 1) {
return 1;
}
return number * method(number - 1);
}
}