我们已经学习了方法,今天我们来认识一下递归与数组
1.递归
2.递归的代码举例
3.数组的几种类型
4.分析数组在栈区的创建与销毁
,开始吧
递归,用最通俗的话来说就是,就是自己重复的调用自己,我们在C语言已经学过递归,其中的汉诺塔和斐波那契数列,下面,我们来用Java实现一下斐波那契数列
/迭代(循环)实现斐波那契数列
/* public static int fib(int n){
if(n<0) {
return -1;
}
if(n==1||n==2){
return 1;
}
int f1=1;
int f2=1;
int f3=-1;
for( int i=3;i<=n;i++){
f3=f1+f2;
f1=f2;
f2=f3;
}
return f3;
}
*/
//递归实现斐波那契数列
/* public static int fib(int n){
if(n==1||n==2)
{
return 1;
}
int ret=fib(n-1)+fib(n-2);
return ret;
}
*/
/*public static void main1(String[] args) {
int ret=fib(41);
System.out.println(ret);
}
}
*/
递归实现n 的阶乘
//递归求 N 的阶乘
public static int sum(int n){
if(n==1)
{
return 1;
}
int tmp=n*sum(n-1);
return tmp;
}
public static void main8(String[] args) {
int ret=sum(5);
System.out.println(ret);
}
正序打印数字
//递归打印数字的每一位
//
//作业内容
//按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4) (递归)
/* public static void everyNumber(int n){
if(n<10){
System.out.println(n);
}else{
everyNumber(n/10);
System.out.println(n%10);
}
}
//最后实现的一定是sout那一串代码
public static void main3(String[] args) {
everyNumber(123);*/
}
逆序打印
public static void everyNumber(int n){
if(n<10){
System.out.println(n);
}else{
System.out.println(n%10);
everyNumber(n/10);
}
}
这几个代码都是具有代表性的,大家慢慢学习
在写递归时,确实是有些地方难以理解的,在判断什么时候递归停止的条件时,实际上也就是在判断起始条件
数组
数组创建通式
数组存放元素类型[]数组名=new 类型[]长度
分类来有三种表达形式
先来说静态数组
int[]arr=new int[10];
这个有new的就是静态数组
new可以省略不写
总结三种表达
int[] arr={1,2,3,4,5};
int[] arr=new int[]{1,2,3,4,5};
int[] arr=new int[5]
引用变量:int[]
变量:arr
数组中存储的是地址的哈希值,理解为地址
引用变量存储了存储对象的地址
即引用引用了一个对象,或者指向了一个对象
与C语言一样,下标都从0开始
public class TestDemo {
public static void main(String[] args) {
int[] arr =new int[]{1,2,3,4,5};
for(int i=0;i<5;i++){
System.out.println(arr.length);
}
}
}
计算长度就是这个方法
数组名.length
循环就和C语言一样,也可以使用for each
但是区别在与
for each就是遍历元素而已,如果要用下表判断数据,比如arr[1]*2,要使用某个元素的时候要用for循环,不可以用foreach。
JVM的结构:
Java虚拟机栈,本地方法栈,堆,方法区,程序计数器
具体的,我们下期再详细讲解奥,886!
今天再为大家做一副涂鸦
谢谢大家支持!