递归永远的神2.0

27 篇文章 0 订阅

对递归的相关应用:

斐波那契数列

用for语句实现:

 public static int fib(int n) {
        int a = 1, b = 1, c = 1;

        for (int i = 3; i <= n; ++i) {
            c = a + b;
            b = a;
            a = c;

        }
        return c;
    }

用递归实现:

  public static int fib(int n){
        if (n<2) return 1;

        else return fib(n-1)+fib(n-2);
    }

但是你会发现用递归实现的时间复杂度特别高,为O(2^n),因为我们每次返回时,要计算fib(n-1)和fib(n-2)。

因此我们需要采用一种只返回一次的操作来减少时间复杂度:

public static int fib(int n,int a,int b){
        if (n<2)
            return a;
        else return fib(n-1, a+b, a);
    }

    public static int fib1(int n){
        int a=1,b=1;
        return fib(n, a, b);
    }

这样只调用了一个递归,时间复杂度减少很明显。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值