斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。
n<=39
代码
public class 斐波那契数列 {
// 递归,可以优化,将计算过的值存储起来
public int fib(int n) {
if (n == 0){
return 0;
}
if (n == 1){
return 1;
}
return fib(n - 1) + fib(n - 2);
}
/**
* 剪枝
* @param n
* @return
*/
Map<Integer, Integer> map = new HashMap<>();
public int fib1(int n) {
if (n == 0){
return 0;
}
if (n == 1){
return 1;
}
int first = 0;
if (map.containsKey(n - 1)){
first = map.get(n - 1);
}else {
first = fib1(n - 1);
map.put(n - 1, first);
}
int second = 0;
if (map.containsKey(n - 2)){
second = map.get(n - 2);
}else {
second = fib1(n - 2);
map.put(n - 2, second);
}
return first + second;
}
// 动态规划
public int fib2(int n){
if (n == 0){
return 0;
}
if (n == 1){
return 1;
}
int f1 = 0;
int f2 = 1;
int sum = 0;
for (int i = 1; i < n; i++) {
sum = f1 + f2;
f1 = f2;
f2 = sum;
}
return sum;
}
public static void main(String[] args) {
斐波那契数列 f = new 斐波那契数列();
//
System.out.println(f.fib2(48));
}
}