JAVA全系列 教程
3762个小节阅读:7092.9k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
递归结构包括两个部分:
【示例】使用递归求n!
xxxxxxxxxx
public class Test22 {
public static void main(String[ ] args) {
long d1 = System.currentTimeMillis();
factorial(10);
long d2 = System.currentTimeMillis();
System.out.printf("递归费时:"+(d2-d1)); //耗时:32ms
}
/** 求阶乘的方法*/
static long factorial(int n){
if(n==1){//递归头
return 1;
}else{//递归体
return n*factorial(n-1);//n! = n * (n-1)!
}
}
}
执行结果如图所示:
执行结果如图所示:
递归的缺陷
算法简单是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。
比如上面的递归耗时558ms(看电脑配置)。但是用普通循环的话快得多,如下所示。
【示例】使用循环求n!
xxxxxxxxxx
public class Test23 {
public static void main(String[ ] args) {
long d3 = System.currentTimeMillis();
int a = 10;
int result = 1;
while (a > 1) {
result *= a * (a - 1);
a -= 2;
}
long d4 = System.currentTimeMillis();
System.out.println(result);
System.out.printf("普通循环费时:"+(d4 - d3));
}
}
执行结果如图3-29所示:
实时效果反馈
1. 如下关于递归结构的说法,错误的是:
A 深度优先搜索(DFS:Depth First Search)就使用了递归
B 递归结构其实就是:方法自己调用自己
C 递归调用会占用大量的系统堆栈,但是内存消耗很少,可以忽略不计
D 递归必须确定什么时候不调用自身方法,否则将陷入死循环。
答案
1=>C