07 斐波那契数列 08 跳台阶 两个题的解答相似
Posted shareidea94
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了07 斐波那契数列 08 跳台阶 两个题的解答相似相关的知识,希望对你有一定的参考价值。
官方正规的数学界的斐波那契数列的定义:
波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用.
是以1开头的,每次我都记混.
07 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
方法一: 用递归
比方法二好在,只用每次记录前两个值就可以了, 时间复杂度为O(n); 空间复杂度为O(1) 建议使用方法一
1 链接:https://www.nowcoder.com/questionTerminal/c6c7742f5ba7442aada113136ddea0c3 2 来源:牛客网 3 4 public class Solution 5 public int Fibonacci(int n) 6 int preNum=1; 7 int prePreNum=0; 8 int result=0; 9 if(n==0) 10 return 0; 11 if(n==1) 12 return 1; 13 for(int i=2;i<=n;i++) 14 result=preNum+prePreNum; 15 prePreNum=preNum; 16 preNum=result; 17 18 return result; 19 20 21
方法二: 用动态规划,用数组记录F(n)的值
1 import java.util.*; 2 public class Solution 3 public static int Fibonacci(int n) 4 if(n<0 || n>39) 5 System.out.println("输入有误,请重新输入"); 6 return -1; 7 8 if(n==0) return 0; 9 if(n==1) return 1; 10 int Fib[] = new int[n+1]; 11 Fib[0] = 0; 12 Fib[1] = 1; 13 for(int i=2;i<=n;i++) 14 Fib[i] = Fib[i-1]+ Fib[i-2]; 15 16 return Fib[n]; 17 18 19 public static void main(String [] args) 20 Scanner sc = new Scanner(System.in); 21 System.out.println("请输入一个整数n:"); 22 int n = sc.nextInt(); 23 int result = Fibonacci(n); 24 System.out.println("斐波那契数列的第n项为:" + result); 25 26
08 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
1 public class Solution 2 public int JumpFloor(int target) 3 if(target <= 0) return 0; 4 if(target == 1) return 1; 5 if(target == 2) return 2; 6 int one = 1; 7 int two = 2; 8 int result = 0; 9 for(int i = 2; i < target; i++) 10 result = one+ two; 11 one = two; 12 two = result; 13 14 return result; 15 16
1 public class Solution 2 public int JumpFloor(int n) 3 if(n<1 ) 4 System.out.println("输入有误,请重新输入"); 5 return -1; 6 7 if(n==1) return 1; 8 if(n==2) return 2; 9 int Fib[] = new int[n]; 10 Fib[0] = 1; 11 Fib[1] = 2; 12 for(int i=2;i<n;i++) 13 Fib[i] = Fib[i-1]+ Fib[i-2]; 14 15 return Fib[n-1]; 16 17
注意:初始值到底是从1开始,还是从0开始,不同的题目要对斐波那契数列有不同的变形
以上是关于07 斐波那契数列 08 跳台阶 两个题的解答相似的主要内容,如果未能解决你的问题,请参考以下文章