题目一:求斐波那契数列的第n项。
写一个函数,输入n,求斐波那契数列的第n项,斐波那契数列的定义如下:n=0,f(n)=0;n=1,f(n)=1;n>1,f(n)=f(n-1)+f(n-2).
思路一:递归
解决一:
public class Test1 {
public static void main(String[] args) {
int num=findNum(3);
System.out.println(num);
}
private static int findNum(int n) {
if(n<=0){
return 0;
}
if(n==1){
return 1;
}
return findNum(n-1)+findNum(n-2);
}
}
思路二:可以发现,递归的话会有很多重复的计算,很浪费时间。
解法二:
package question10;
public class Test1 {
public static void main(String[] args) {
// int num=findNum(3);
// System.out.println(num);
System.out.println(findNum2(10));
}
private static int findNum2(int n){
int m1=0;
int m2=1;
if(n==0){
return 0;
}
if(n==1){
return 1;
}
for(int i=2;i<=n;i++){
int temp=m1+m2;
m1=m2;
m2=temp;
}
return m2;
}
}
题目二:青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:类似斐波那契数列,稍微不同的时,这个是f(1)=1;f(2)=2;f(n)=f(n-1)+f(n-2).
解法:
package question10;
public class Test2 {
public static void main(String[] args) {
System.out.println(findNum(4));
}
private static int findNum(int n) {
if(n==1){
return 1;
}
if(n==2){
return 2;
}
int m1=1;
int m2=2;
for(int i=3;i<=n;i++){
int temp=m1+m2;
m1=m2;
m2=temp;
}
return m2;
}
}