一个简单的递归
public class PrintFib {
//建立一个函数,用于计算数列中的每一项
public static int fib(int num) {
//判断:是否是第一个数和第二个数
if(num == 1 || num == 2) {
return 1;
}else {
//循环调用本函数
return fib(num - 2) + fib(num - 1);
}
}
//主函数(程序入口)
public static void main(String[] args) {
//建立一个for循环,用于打印第一个至第十个数字
for(int i = 1;i <= 10;i++) {
//调用函数进行打印
System.out.print(fib(i) + "\t");
}
}
}
题目:
现有一个繁殖数列,数列最大值为maxNum(数字maxNun将由出题程序随机生成);请根据数列的最大值maxNun推算出一个最大长度的繁殖数列,并将其放入数组作为返回结果
补充说明:
1.本题的要求是根据繁殖数列的最后一个数ma.um,倒出的整个繁殖数列。
需要注意,倒推过程可能会得出不同的解,比如,以1200为数列最大值,可以倒推
出:
1,1199,1200
450,100,550,650,1200
28,18,46,64,110,174,284,458,742, 1200
…
等若干结果,请答题者将其中最大长度的一个解(也称为最优解)作为数组返回值。
- 可能存在多个长度相同的最优解,只需返回任意一个即可。
操作指导:
- 在Test_04,java中编写代码,请在注释第一行填写您的姓名
- 运行程序,若答题正确,将获得一个Token。
public static void main(String[] args) {
fn(1200);
}
private static void fn(int maxNum) {
//创建链表
LinkedList<Integer> results = new LinkedList<Integer>();
int size = 0;
for (int i = 1; i < maxNum; i++) {
//创建临时链表
LinkedList<Integer> listTemp = new LinkedList<Integer>();
//向前添加数据
listTemp.addFirst(maxNum);
listTemp.addFirst(i);
//调用函数得到数组
LinkedList<Integer> resultTemp = getArray(listTemp);
//保存最大的长度的集合
if(resultTemp.size()>=size) {
results = resultTemp;
size = resultTemp.size();
}
}
//添加链表到数组中
int [] resultArr = new int [results.size()];
int index = 0;
for (int i : results) {
resultArr[index] = i;
index++;
}
System.out.println(Arrays.toString(resultArr));
}
private static LinkedList<Integer> getArray(LinkedList<Integer> result) {
//用第三项减去第二项 大于零即可递归
int temp = result.get(1)-result.get(0);
if(temp>0) {
result.addFirst(temp);
getArray(result);
}
return result;
}
结果:
[15, 14, 29, 43, 72, 115, 187, 302, 489, 791, 1280]
题目:
n个鸡蛋, 可以是一天吃一个, 也可以是一天吃两个,有多少种吃法
public class Test {
static int[] methods = {1, 2};
static List<String> list = new ArrayList<String>();
public static void main(String[] args) {
eatEggs(5, "");
System.out.println(list);
}
public static void eatEggs(int num, String str) {
if(num > 0) {
for(int method : methods) {
if(method <= num) {
String temp = str + method;
eatEggs((num-method), temp);
} else {
break;
}
}
} else {
list.add(str);
}
}
}
结果:
[11111, 1112, 1121, 1211, 122, 2111, 212, 221]