大厂面试--递归与迭代

在这里插入图片描述

package com.main.xxx;

public class TestStep {
    public static void main(String[] args) {
        TestStep testStep = new TestStep();
        //获取当前系统时间
        long start = System.currentTimeMillis();
        System.out.println(testStep.f(40));//165580141
        long end = System.currentTimeMillis();
        System.out.println(end-start);//359
    }
    //实现f(n):求n步台阶,一共有几种走法
    public int f(int n){
        if (n<1){
            throw new IllegalArgumentException(n + "甭能小于一");
        }
        if (n == 1 || n == 2){
            return n;
        }
        return f(n-2) + f(n-1);
    }
}

在这里插入图片描述

package com.main.xxx;

public class TestStep2 {
    public static void main(String[] args) {
        TestStep2 testStep2 = new TestStep2();
        long start = System.currentTimeMillis();
        System.out.println(testStep2.loop(40));//165580141
        long end = System.currentTimeMillis();
        System.out.println(end - start);//<1ms
    }
    public int loop(int n){
        if (n<1){
            throw new IllegalArgumentException(n + "甭能小于一");
        }
        if (n == 1 || n == 2){
            return n;
        }

        int one = 2;//初始化为走到第二季台阶的走法
        int two = 1;//初始化为走到第一级台阶的走法
        int sum = 0;

        for (int i = 3; i <= n; i++) {
            //最后跨2步 + 最后跨1步的走法
            sum = two + one;
            two = one;
            one = sum;
        }
        return sum;
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值