Java高频经典面试题(第一季)五:递归与迭代

编程题:  有n步台阶, 一次只能上 1步 或 2步, 共有多少种走法?

  • 递归
  • 循环迭代

递归:

package will01;

import org.junit.Test;

public class TestStep {
    @Test
    public void test(){
        long start = System.currentTimeMillis();
        System.out.println(f(30));
        long end = System.currentTimeMillis();
        System.out.println("time : "+ (end - start));

    }

    //实现f(n):求 n步 台阶,一共有 几种 走法
    public int f(int n ){
        if(n < 1){
            throw new IllegalArgumentException(n + "不能小于1 ");
        }
        if(n == 1 || n == 2){
            return n ;
        }
        return f(n - 2)+ f( n - 1);
    }

}

循环迭代:

package will01;

import org.junit.Test;

public class TestStep2 {

    @Test
    public void test(){
        long start = System.currentTimeMillis();
        System.out.println(loop(40));
        long end = System.currentTimeMillis();
        System.out.println("time : "+ (end - start)); // < 0ms

    }

    public int loop(int n){
        if(n < 1){
            throw new IllegalArgumentException(n + "不能小于1 ");
        }
        if(n == 1 || n == 2){
            return n;
        }
        int one = 2; // 初始化为走到第二台阶的走法
        int two = 1; // 初始化为走到第一台阶的走法
        int sum = 0;

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

        return sum;

    }

}

最大的不同: 迭代 花费的时间 比 递归 少很多。

原文地址:https://www.cnblogs.com/william-dai/p/11597966.html

时间: 2024-10-11 22:02:04

Java高频经典面试题(第一季)五:递归与迭代的相关文章

Java线程经典面试题

53道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒.Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点. 2) 线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并

Java开发经典面试题:Javaweb相关

今天更新的Java相关面试题,是针对Javaweb总结的,对于正在找相关工作的小伙伴,可以参考一下,金三银四,给自己的面试多一些准备,争取高一些薪资! 1. MVC 的各个部分都有那些技术来实现?如何实现? 答:MVC 是Model-View-Controller 的简写."Model" 代表的是应用的业务逻辑(通过JavaBean,EJB 组件实现), "View" 是应用的表示面(由JSP 页面产生),"Controller" 是提供应用的处

appium+Java+testng自动化框架搭建-第一季

app自动化越来越火,随着移动app的不断发展,手机端测试日益火爆,想成为一个高级软件测试工程师必须要掌握,那么我们今天就来搭建appium+Java+testng自动化测试框架. Appium环境搭建(Windows版) 在网络上看到很多教程,今天安装了appium,把安装过程详细记录一遍,如下图: 我的电脑环境是win7 64位 注:appium安装到C盘,node.js安装到C盘 一.安装node.js 1.安装node.js nodejs 官网下载地址:https://nodejs.or

Java高频面试题汇总--Java职场范儿

经历了两周的面试,终于收到了几个满意的offer.换工作的过程是痛苦的,除了一天马不停蹄地跑好几家公司面试,剩下的时间基本就是背面试题了.想找到一份适合自己的面试题并不简单,比如我找的是高级Java开发的职位.出于之前公司系统架构的设计,需要准备Java.spring.springboot.mysql.mybatis.mycat.zookeeper.dubbo.kafka.redis.网络等面试题.我结合之前面试的20多家公司,以及从CSDN/简书/掘金/公众号等相关渠道搜集到的面试题,从中整理

小梅科普:微信公众平台深度开发JAVA版(第一季)

微信作为当前流行的通信社交软件有了上亿的用户量,几乎每一个只能手机都要安装微信.但是,市场上对于JAVA开发微信公众平台的资料却少之又少,多数的资料一般是其他语言的.因此,主讲老师经过潜心研究.认真准备,录制了这套针对JAVA开发语言的微信公众平台开发教程. 1.课程研发环境 开发语言:JAVA WEBServer:TOMAT DATABASE:MySQL 开发工具:myeclipse.MySQL-Front等 其他:在手机应用中的CSS3+div布局.DWR.mybatis.gson.quar

java后端研发经典面试题总结

垃圾回收算法 1.标记-清除算法 标记-清除算法是最基本的算法,和他的名字一样,分为两个步骤,一个步骤是标记需要回收的对象.在标记完成后统一回收被标记的对象.这个算法两个问题.一个是效率问题,标记和清除的效率不高.第二个问题是标记-清除之后会有大量不连续的碎片空间,如果我们需要更大的连续内存就必须GC. 2.复制算法 复制算法,不同于标记-清除,复制算法大多数用于新生代,它需要大小相等的两块内存,每次只使用一块内存,当GC的时候会把这块内存存活的对象复制到另外一块内存上面,解决了时间效率和空间碎

Java程序员精选高频面试笔试题全家桶,通往BAT必备法宝!《附赠PDF》

作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动? 最近这波互联网裁员浪潮下,许多朋友被裁之后几周内陆陆续续找到工作,但也有部分现在还在求职中,其中重要区别就是在于平时是否坚持积累和成长. 面对工作,与其选择满不情愿,最后收获痛苦煎熬和差强人意的结果,不如思考如何提升工作效率和自身能力,在工作中关注自身能力成长,并去刻意练习,想办

经典面试题回答——学习Java基础的目的

本系列知识解释:相信每一个学习Java的人都是从JavaSE开始的,也就是Java基础开始.但是却并不清楚学习Java基础到底有什么用? 首先我来回答这个问题,学习Java基础是有两个目的: 一.掌握基本的Java语言底层编码方法,同时掌握Java这门语言的编程思想,为了后期学习JavaEE打下基础,要不然在学习JavaEE的时候,连封装,继承,多态都不懂,那就实在是没法说了(相信在传智播客学习过Java基础的同学,这些都不是问题.) 二.在学习完JavaSE和JavaEE后招工作的时候能够答上

Java入门第一季

慕课网:http://www.imooc.com/learn/85 Java入门知识第一季 1.Java开发环境和IDE的使用: 2.变量和常量 3.常用的运算符 4.流程控制语句 5.数组:使用Arrays操作数组.foreach循环遍历数组 6.方法的定义,重载调用 跟着慕课网的教程,去一步一步补充完成小练习中的代码,学习效率会比较高~