斐波那契数列类型题

一个简单的递归

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
  …
  等若干结果,请答题者将其中最大长度的一个解(也称为最优解)作为数组返回值。

  1. 可能存在多个长度相同的最优解,只需返回任意一个即可。

操作指导:

  1. 在Test_04,java中编写代码,请在注释第一行填写您的姓名
  2. 运行程序,若答题正确,将获得一个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]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逃离到火星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值