斐波那契数列应用

  • 题目描述:

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。

分析:根据斐波那契数列定义可以使用递归  Fibonacci(int n)=Fibonacci(int n-1)+Fibonacci(int n-2)

Fibonacci(0)==0

Fibonacci(1)==1

  • n<=39

  • 题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

分析:斐波那契数列的应用,只能从n-1个台阶或者n-2个台阶调到第n个台阶,且剩下一种跳法,从n-2个台阶开始跳,只能挑两步,跳一步包含在从n-1的台阶跳的情况里

public int JumpFloor(int target) {
		 	if(target==1){
		 		return 1;
		 	}
		 	if(target==2){
		 		return 2;
		 	}
		 	return (JumpFloor(target-1)+JumpFloor(target-2));
	    }

 

 public int JumpFloorII(int target) {
	        return (int)Math.pow(2,target-1);
	    }
  • 题目描述 

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

f(n)=f(n-1)+f(n-2)+f(n-3)+.....+f(1)         1式

f(n-1)=f(n-2)+f(n-3)+f(n-4)+.....+f(1)      2式

1式-2式可得  f(n)=2*f(n-1)

f(1)=1

是一个2为公比的等比数列an=a1*q^(n-1)

  • 题目描述

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

public class Solution {
    public int RectCover(int target) {
         if(target<=0)
        {
            return 0;
        }
        if(target==1)
        {
            return 1;
        }
        if(target==2)
        {
            return 2;
        }
        return (RectCover(target-1)+ RectCover(target-2));
    }
}
  • 题目描述

题目描述

有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?

(1)斐波那契数列,比如第三个月的兔子数等于第二个月的兔子数加第一个月的兔子数(第一个月的兔子到第三个月,每只兔子都会生一只兔子)

import java.util.ArrayList;
import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while (scanner.hasNext()) {
			int N = scanner.nextInt();
			System.out.println(getRabbit(N));

		}
	}
	private static int getRabbit(int n) {
		if(n==1 || n==2){
			return 1;
		}
		return getRabbit(n-1)+getRabbit(n-2);
	}

}

 (2)递归求解,空间复杂度高

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while (scanner.hasNext()) {
			int N = scanner.nextInt();
			ArrayList<Integer> list = new ArrayList<>();
			int first = 1;
			list.add(first);
			System.out.println(getRabbit(first, N, list));

		}
	}
	private static int getRabbit(int first, int n, ArrayList<Integer> list) {
		if (first < n - 1) {
			int count = 0;
			for (int i = first + 2; i <= n; i++) {
				list.add(i);
				count++;
			}
			int sum = list.size();
			for (int j = sum - count; j < sum; j++) {
				getRabbit(list.get(j), n, list);

			}
		}
		return list.size();
	}

}

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
斐波那契数列欣赏 出版时间:2012年版 内容简介   斐波那契数列,产生于12世纪意大利数学家斐波那契叙述的“生小兔问题”。从一个十分简明的递推关系出发,竟引出了一个充满奇趣的数列.它与植物生长等自然现象,以及几何图形、黄金分割、杨辉三角、矩阵运算等数学知识有着非常微妙的联系,并且在优选法、计算机科学等领域中得到广泛应用。吴振奎编著的《斐波那契数列欣赏》系统地介绍了斐波那契数列的性质和应用,将知识性与趣味性融为一体,阐述了几代数学家的思维方法,内容丰富,妙趣横生。《斐波那契数列欣赏》适用于大学、中学师生。 目录 一 生小兔问题引起的二 它们也产生斐波那契数列三 通项的其他表达式四 斐波那契数列是二阶循环数列五 斐波那契数列的数论性质六 斐波那契数列的其他性质七 某些斐波那契数列之和八 斐波那契数列与连分数九 斐波那契数列的某些推广形式十 斐波那契数列应用十一 黄金数O.618…一 生小兔问题引起的二 它们也产生斐波那契数列三 通项的其他表达式四 斐波那契数列是二阶循环数列五 斐波那契数列的数论性质六 斐波那契数列的其他性质七 某些斐波那契数列之和八 斐波那契数列与连分数九 斐波那契数列的某些推广形式十 斐波那契数列应用十一 黄金数O.618…十二 黄金数与斐波那契数列十三 黄金矩形、黄金三角形、黄金圆……十四 黄金分割与优选法及其他十五 杨辉(贾宪)、帕斯卡三角十六 其他数字三角形编辑手记参考文献十二 黄金数与斐波那契数列十三 黄金矩形、黄金三角形、黄金圆……十四 黄金分割与优选法及其他十五 杨辉(贾宪)、帕斯卡三角十六 其他数字三角形编辑手记参考文献

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值