例题1:计算1+2+3+4+5+...+98+99+100
这里我们假设f(n)这个函数是求1~n的累加,那么f(100)就是我们要求的答案
PS: 写递归时,一定要先写它的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 ↑ 归
class Test01{
public static void main(){
System.out.println(f(10));
}
public static int f(int n){
if(n==1){
return 1;
}
return f(n-1)+n;
}
}
问题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
两种方法:一种迭代,一种递归
迭代:
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;
}
}
O(n)线性级别
递归:
public static int fibo(int n){
if(n==1||n==2){
return 1;
}
return fibo(n-1)+fibo(n-2);
}
for(int i=1;i<=100;i++){
System.out.println(fibo(i));
}
缺点 越往后 越慢 代码比较简洁
复杂度:O(n*2^n)