递归的两个经典题型

例题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)

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值