例题.有一组数据:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 …
特点:从第三个数开始,当前的数是前面俩个数相加之和
要求1:写出一方法,给方法传一个参数,可以返回一个这样序列的数组,这个参数表示这个序列的长度:
例如:test(1) 返回数组{1}
test(2)返回数组{1,1}
test(3)返回数组{1,1,2}
test(4)返回数组{1,1,2,3}
依次类推:
要求2:方法内部的代码也要使用数组实现
要求3:方法的声明如下所示
public int[] test(int num){
int[] a = null;
//实现代码
return a;
}
- 利用数组实现这个序列:
package com.chouhan.test1;
public class Test1 {
public static int[] test(int num) {
//定义一个数组,数组的长度就是序列的长度
int[] a=new int[num];
//前两个数是固定的
if(num==1) {
a[0]=1;
}else if(num==2) {
a[0]=1;
a[1]=1;
//从第三个数开始,每个数是前两个数相加之和
}else {
a[0]=1;
a[1]=1;
//从数组的第三个元素,也就是下标为2开始,循环给数组元素赋值
for (int i = 2; i < a.length; i++) {
//当前这个数的前两个数的和
a[i]=a[i-1]+a[i-2];
}
}
return a;
}
public static void main(String[] args) {
//测试输出满足规律的数组,数组的长度为5
int[] test=test(5);
//迭代器的方式输出数组
for (int i : test) {
System.out.println(i);
}
}
}
- 递归:java中的方法调用有⼀种情况称为递归,就是⼀个方法内部再调用自己,同时提供⼀个退出方法条件。
利用递归的方式完成上面的题目:
package com.chouhan.test1;
public class Method2 {
//1.先用递归实现每一个数
public int test(int num){
//前两个数是1
if (num <= 2)
return 1;//只有一行代码可以省略大括号
//后两个数就用递归的方式实现
return test(num - 1) + test(num - 2);
}
public static void main(String[] args) {
Method2 m = new Method2();
//2.定义一个数组把每个数加进去
int[] a=new int[10];//这个数组长度是10
for (int i = 0; i < a.length; i++) {
a[i]=m.test(i+1);//数组下标从0开始,递归函数从1开始
}
//3.遍历输出这个数组
for (int i : a) {
System.out.println(i);
}
}
}
递归实现:1到100的累加。
package com.chouhan.test1;
/*
* 要求:
* 1.在go⽅法内部完成代码
* 2.实现从1累加到100的和
* 3.go⽅法内部的所写的代码不能超过俩句,注意⼀个分号就是⼀句代码。
*/
public class Test3 {
public static void main(String[] args) {
Test3 t = new Test3();
int sum = t.go(100);
System.out.println(sum);
}
public int go(int i) {
if(i==1) {
return 1;
}else {
//要实现累加,就要加上前面的那个累加总数
return i+go(--i);//go(i-1)也可以
}
}
}