一、递归与循环的对比
- 递归会带来大量的函数调用。这是不好的
- 在计算环节特别大的前提下,递归就是不好的,因为递归是先调用,再计算。
- 在大量计算的前提下可能会造成栈溢出(StackOverFlow)
- 如下图:
- 循环是先计算再调用,计算完后会调用的方法会从栈中抹去,最后将结果输出
- 能不用递归就不用递归
- 小计算可以考虑用递归,大计算就不考虑了
二、递归讲解
1、概念
- A方法调用B方法,我们很容易理解
递归就是:A方法调用A方法!就是自己调用自己
2、递归的用处
- 递归策略只需要少量的程序就可以描述出解题过程所需要的多次重复计算,大大减少了程序的代码量
- 递归的能力在于用有限的语句来定义对象的无限集合
3、递归结构包含两个部分
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环
- 递归体:什么时候需要调用自身方法
4、代码如下
5、递归的坏处
- 递归会带来大量的函数调用。这是不好的
- 在计算环节特别大的前提下,递归就是不好的,因为递归是先调用,再计算。循环是先计算再调用
三、循环讲解
1、while 循环
- 基本结构
1 while( 布尔表达式 ){
2 //循环结构
3 }
- 只要布尔表达式为true,循环就会一直执行下去
- 循环条件一直为true就会造成无限循环【死循环】,这是在正常程序下需要避免的
- 少部分情况下需要循环一直执行下去。例如服务器的请求响应监听等
1 //例子:从1加到100求和
2 //代码主要部分
3 while(i<=100){
4 sum+=i;
5 i++;
6 }
2、do...while循环
- 对于while'语句而言,如果不满足条件,则不能进入循环,但有时候我们需要即使不满足条件的情况下,程序也要至少执行一次
do.....while循环和while循环相似,不同的是:do....while循环至少会执行一次
- 语法结构
1 do{
2 //代码语句
3 }while(布尔表达式);
- while与do-while的区别
while是先判断后执行。do-while是先执行后判断
do-while总是保证循环体至少会被循环一次!这是它们的主要区别
1 //例子:从1加到100求和
2 //代码主要部分
3 do{
4 sum+=i;
5 i++;
6 }while(i<=100);
3、for 循环
- 虽然所有的循环结构都可以使用while和do....while表示,但Java提供了另一种语句:
for循环
- for循环相较与其它二者更高效,执行速度快
- 格式如下
1 for(初始化;布尔表达式;迭代式){
2 //代码语句
3 }
4、在Java5
种引入了一种主要用于数组的增强型for循环
- 主要是用来遍历
数组
与集合
的 - 格式如下:
1 for(声明语句:表达式){
2 //代码语句
3 }
4
5
6 //例子如下:
7 int[] numbers={1,2,3,4,5};
8 for(int x:numbers){
9 System.out.println("数组中的元素为"+x)
10 }
- 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。
- 其作用域限定在循环语句块,其值与此时数组元素的值相等。
- 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
- 另加:数组的静态与动态定义