方法的递归调用:
示例:
sum(n) 代表等差数列的前n项的和
sum(n) = n + sum(n-1) and n>=1;
1 2 3 4 5
static int sum(int n){
if(n==1)
return n;
return n + sum(n-1);
}
递归调用的特点:
1 思考逻辑简单
2 性能差(需要在栈中保存全部的临时变量)
3 必须有结束条件
4 大多数的递归都可以改成循环代码实现。
一般情况下:循环解决问题的性能高于递归解决。
练习:
1: 斐比纳切数列的第n项 1 1 2 3 5 8 13 ...
f(n) = f(n-1)+f(n-2) and n>=3, f(1)=f(2)=1
二维数组
1 Java的数组是对象,是在内存堆中分配的
int[] ary = new int[]{2,3,4};
ary = null;
new运算返回的是堆对象的首地址
引用变量ary的值是地址值,引用变量通过地址引用
操作堆对象。
引用变量可以赋值为null,表示不引用任何对象。
不被任何引用所引用的对象,是内存垃圾,将被垃圾
收集器回收。
2 二维数组
1 Java其实没有真正的二维数组
2 Java使用数组的数组实现了二维数组,
一维数组套一维数组实现
int[][] ary = new int[2][3];
ary[1][1]=5;
int[] a = ary[1];
3 声明:int[][] ary;
4 初始化:
1 动态初始化
int[][] ary = new int[2][3];
指定第一维长度,创建第一维数组,
第一维每个元素是 null
int[][] ary = new int[2][];
System.out.println(ary[0]);//null
System.out.println(ary[0][0]);//异常
例题
以上代码的结果
A null null B null 0
C null 和异常 D 编译错误
给定成员动态初始化
int[][] ary = new int[][]{{2,3},{3,4}};
静态初始化,不能用来赋值:
int[][] ary = {{2,3},{3,4}};
数组的迭代:
1 迭代就是遍历,就是对多个元素逐一进行处理。
2 一维数组的遍历也叫一维数组迭代
3 二维数组的迭代,就是嵌套的一维数组的迭代
作业
1 全部实现课堂代码
2 实现一个二维整数数组 16×16
int[][] ary = new int[16][16];
使用二维数组的迭代把每一个数组元素填充为-1。
3 使用循环实现计算斐比纳切数列的第n项
使用循环计算 等差数列的和 1+2+3+4...
4 使用递归实现计算n的阶乘
n! = 1*2*3*...*n
或者
n! = f(n) = f(n)*f(n-1) 并且 f(1)=1
5 使用循环实现n!
示例:
sum(n) 代表等差数列的前n项的和
sum(n) = n + sum(n-1) and n>=1;
1 2 3 4 5
static int sum(int n){
if(n==1)
return n;
return n + sum(n-1);
}
递归调用的特点:
1 思考逻辑简单
2 性能差(需要在栈中保存全部的临时变量)
3 必须有结束条件
4 大多数的递归都可以改成循环代码实现。
一般情况下:循环解决问题的性能高于递归解决。
练习:
1: 斐比纳切数列的第n项 1 1 2 3 5 8 13 ...
f(n) = f(n-1)+f(n-2) and n>=3, f(1)=f(2)=1
二维数组
1 Java的数组是对象,是在内存堆中分配的
int[] ary = new int[]{2,3,4};
ary = null;
new运算返回的是堆对象的首地址
引用变量ary的值是地址值,引用变量通过地址引用
操作堆对象。
引用变量可以赋值为null,表示不引用任何对象。
不被任何引用所引用的对象,是内存垃圾,将被垃圾
收集器回收。
2 二维数组
1 Java其实没有真正的二维数组
2 Java使用数组的数组实现了二维数组,
一维数组套一维数组实现
int[][] ary = new int[2][3];
ary[1][1]=5;
int[] a = ary[1];
3 声明:int[][] ary;
4 初始化:
1 动态初始化
int[][] ary = new int[2][3];
指定第一维长度,创建第一维数组,
第一维每个元素是 null
int[][] ary = new int[2][];
System.out.println(ary[0]);//null
System.out.println(ary[0][0]);//异常
例题
以上代码的结果
A null null B null 0
C null 和异常 D 编译错误
给定成员动态初始化
int[][] ary = new int[][]{{2,3},{3,4}};
静态初始化,不能用来赋值:
int[][] ary = {{2,3},{3,4}};
数组的迭代:
1 迭代就是遍历,就是对多个元素逐一进行处理。
2 一维数组的遍历也叫一维数组迭代
3 二维数组的迭代,就是嵌套的一维数组的迭代
作业
1 全部实现课堂代码
2 实现一个二维整数数组 16×16
int[][] ary = new int[16][16];
使用二维数组的迭代把每一个数组元素填充为-1。
3 使用循环实现计算斐比纳切数列的第n项
使用循环计算 等差数列的和 1+2+3+4...
4 使用递归实现计算n的阶乘
n! = 1*2*3*...*n
或者
n! = f(n) = f(n)*f(n-1) 并且 f(1)=1
5 使用循环实现n!