class Demo408{
public static void main(String[] args){
//show();
/*
问题1:计算1+2+3+4+5+...+98+99+100
f(n) 是求1~n的累加
f(100)就是我们当前最大的问题
写递归时,一定要先写它的end!
↓ 递
f(n)=f(n-1)+n
f(100)=f(99)+100 return 1+2+3+..+99 +100
f(99)=f(98)+99 return 1+2+...+98 +99
...
f(4)=f(3)+4 return 1+2+3+4
f(3)=f(2)+3 return 1+2+3
f(2)=f(1)+2 return 1+2
f(1)=1 return 1
→ end ↑ 归
*/
// System.out.println(f(10));
/*
问题2:斐波那契数列 求前20项
1 1 2 3 5 8 13 21 34 55 ......
f(n)指的是斐波那契的第n项
f(n)=f(n-1)+f(n-2) f(1)=1 f(2)=1
f(5)
f(4) f(3)
f(3) f(2) f(2) f(1)
f(2) f(1)
*/
//缺点 越往后 越慢 代码比较简洁
//O(n*2^n)
// for(int i=1;i<=100;i++){//O(n)
// System.out.println(fibo(i));//O(2^n)
// }
System.out.println("==============");
fiboIterator(10000);//用迭代的思想求前20项
}
//O(n)线性级别
public static void fiboIterator(int n){
int a=1;
int b=1;
System.out.println(a);
System.out.println(b);
int count=2;
int c;
while(true){
c=a+b;
System.out.println(c);
count++;
if(count==n){
return;
}
a=b;
b=c;
}
}
// public static int fibo(int n){
// if(n==1||n==2){
// return 1;
// }
// return fibo(n-1)+fibo(n-2);
// }
// public static int f(int n){
// if(n==1){
// return 1;
// }
// return f(n-1)+n;
// }
public static void show(){
System.out.println("show....");
show();
}
}