題目一:求斐波那契數列的第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;
}
}