1.斐波那契數列
要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項爲0)。n<=39
觀察斐波那契數列的特徵可以知道當n>2時,第n項的結果都是由前兩項相加而得到的,因此使用遞歸的思想,即f(n)=f(n-1)+f(n-2)。
public static long method(int n) {
if(n<2) {
return 1;
}else {
long a=method(n-1) + method(n-2);
return a;
}
}
另外還有一種不使用遞歸的方法,如下所示主要是改變賦值。
private static int method2(int n) {
// TODO Auto-generated method stub
//a,b,c
int a=1;
int b=1;
int c = 0;
for(int i=1;i<n;i++) {
c=a+b;
a=b;
b=c;
}
return c;
}
2.漢諾塔問題
漢諾塔問題實際上也是一個遞歸問題,解決該問題的核心在於,無論有多少個盤子,都只認爲有兩個,即上面所有盤子作爲一個整體和最下面的一個。那麼最終就只簡化爲三步操作,如上圖所示從左到右分別爲A\B\C柱子,假設只有兩個盤子,詳解操作如下
第一步:將最上面盤子從A移動到B
第二步:將最底下的盤子從A移動到C
第三步:將B中的盤子移動到C
代碼如下:
public class Hanno {
public static void main(String[] args) {
// TODO Auto-generated method stub
hanno(2,'A','B','C');
}
/*
* n 表示n個盤子
* from 爲開始的盤子
* in爲中間的盤子
* to爲目標盤子
*
* _|_ _|_ _|_
* A B C
*/
public static void hanno(int n,char from,char in,char to) {
if(n==1) {
System.out.println("將第1個盤子從"+from+"移動到"+to);
}else {
//無論有多少個盤子,都認爲只有兩個,即最上面的整體和最底下的一個
hanno(n-1,from,to,in);
System.out.println("將第"+n+"個盤子從"+from+"移動到"+to);
hanno(n-1,in,from,to);
}
}
}