编程题:  有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://study.163.com/course/courseLearn.htm?courseId=1209482832#/learn/video?lessonId=1279646393&courseId=1209482832

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

  1. Java高频经典面试题(第一季)四:方法的参数传递机制

    考点? 方法的参数传递机制 String,包装类等对象的不可变性 方法的参数传递机制: ①形参是基本数据类型 传递数据值 ②实参是引用数据类型 传递地址值 特殊的类型:String.包装类等对象不可变 ...

  2. Java高频经典面试题(第一季)一:自增的分析

    package will01; public class testZiZeng { public static void main(String[] args) { int i = 1; i = i ...

  3. 800+Java后端经典面试题,希望你找到自己理想的Offer呀~

    前言 在茫茫的互联网海洋中寻寻觅觅,我收藏了800+道Java经典面试题,分享给你们.建议大家收藏起来,在茶余饭后拿出来读一读,以备未雨绸缪之需.另外,面试题答案的话,我打算后面慢慢完善在github ...

  4. 50道Java集合经典面试题(收藏版)

    前言 来了来了,50道Java集合面试题也来啦~ 已经上传github: https://github.com/whx123/JavaHome 1. Arraylist与LinkedList区别 可以 ...

  5. Java线程经典面试题

    53道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序 ...

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

    app自动化越来越火,随着移动app的不断发展,手机端测试日益火爆,想成为一个高级软件测试工程师必须要掌握,那么我们今天就来搭建appium+Java+testng自动化测试框架. Appium环境搭 ...

  7. js高频经典面试题总结

    类型转换问题 console.log(null>=0); console.log(null<=0); console.log(null==0); console.log(undefined ...

  8. 数据结构Java版之递归与迭代算法(五)

    递归的概念很简单,就是自己调用自己. 而迭代,则是通过修改初始化数据,得到中间结果,然后不断的对中间结果进行修改,而得到最终结果.简单来说迭代就是循环. 在此,我们用一个比较经典的Fibonacci数 ...

  9. 互联网大厂高频重点面试题 (第2季)JUC多线程及高并发

    本期内容包括 JUC多线程并发.JVM和GC等目前大厂笔试中会考.面试中会问.工作中会用的高频难点知识.斩offer.拿高薪.跳槽神器,对标阿里P6的<尚硅谷_互联网大厂高频重点面试题(第2季) ...

随机推荐

  1. ivew url 的输入

    1. <FormItem label="链接" prop="url"> <Input v-model="formValidate.u ...

  2. redis JedisConnectionException: Could not get a resource from the pool

    转载:https://blog.csdn.net/testcs_dn/article/details/43052585 产生此错误的原因通常是: 一.Redis没有启动: 我自己遇到一次这样的问题.汗 ...

  3. Linux自用指令——2019年10月23日

    1.ls ls命令是列出目录内容(List Directory Contents)的意思.运行它就是列出文件夹里的内容,可能是文件也可能是文件夹. ls -a 列出目录所有文件,包含以.开始的隐藏文件 ...

  4. Ubuntu 16.04配置vncviewer

    网上有各种各样的教程,既混乱又复杂.这是提供一个亲自测试可用的配置方案,十分简单,桌面环境选用xfce,Ubuntu版本是16.04. 1 安装 Xfce 和 TightVNC sudo apt in ...

  5. JAVA学习笔记--赋值(“=”)

    参考来源:<java编程思想(第四版)> 见第三章3.4节 基本数据类型存储了实际的数值,并非指向一个对象的引用,故其赋值,就是直接将一个地方的内容复制到了另一个地方.例如,对基本数据类型 ...

  6. 【leetcode】1013. Pairs of Songs With Total Durations Divisible by 60

    题目如下: In a list of songs, the i-th song has a duration of time[i] seconds. Return the number of pair ...

  7. ECS运维:操作系统有异常?诊断日志来帮忙!

    ​云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新.阿里云使用严格的IDC标准.服务器准入标准 ...

  8. Oracle体系结构理论

    问题: 1:通常说Oracle数据库是什么? 2:如何理解Oracle实例? 3:Oracle实例由哪些部分组成,它们之间的作用是什么? 4:如何理解Oracle的物理结构? 5:Oracle的物理结 ...

  9. POJ 3481 Double Queue (treap模板)

    Description The new founded Balkan Investment Group Bank (BIG-Bank) opened a new office in Bucharest ...

  10. HDU - 6621 K-th Closest Distance 主席树+二分答案

    K-th Closest Distance 主席树第二波~ 题意 给你\(n\)个数\(m\)个询问,问\(i\in [l,r]\)计算每一个\(|a_{i}-p|\)求出第\(k\)小 题目要求强制 ...