编程题:  有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. JAVA学习笔记--方法中的参数调用是引用调用or值调用

    文献来源:<JAVA核心技术卷Ⅰ>,第4章第5节 (没有相关书籍的可看传送门) ps:测试demo因为偷懒,用的是String对象 结论:Java使用的是对象的值引用.即将任何对象所在内存 ...

  2. js-ifelse-奇技淫巧

    我们有A,B,C,D四个不同的类别,在最开始的时候只有三个类别,并且两个类别是做同样的事: function categoryHandle(category) { if(category !== 'A ...

  3. php rtrim()函数 语法

    php rtrim()函数 语法 rtrim()函数怎么用? php rtrim()函数用于删除字符串右边的空格或其他预定义字符,语法是rtrim(string,charlist),返回经过charl ...

  4. MAX3232 每次只有在上电后,再连接串口线正常——保护电阻。RS232防雷保护

    转载:http://m.newsmth.net/article/Circuit/298517?p=1 转载:http://www.360doc.com/content/18/0719/13/57938 ...

  5. [CF1168D]Anagram Paths

    题意:给一棵\(n\)个节点的二叉树,每条边上有一个小写字母或者\(?\),\(q\)次修改操作,每次修改某条边上的字符,问修改后是否存在一种方案,使得给所有\(?\)填上小写字母后,所有叶子到根的路 ...

  6. 七、单例设计模式共享数据分析、解决、call_once

    一.设计模式大概谈 代码的一些写法,与常规的写法不太一样,程序灵活,维护起来很方便,但是别人接管.阅读代码很痛苦. 用设计模式理念写出来的代码很晦涩.<< head first>&g ...

  7. thinkphp5 redis使用

    参数参考位置:thinkphp\library\think\cache\driver class Redis extends Driver { protected $options = [ 'host ...

  8. error C2065: ‘_bstr_t’ : undeclared identifier

    转自VC错误:http://www.vcerror.com/?p=828 问题描述: error C2065: '_bstr_t' : undeclared identifier 解决方法: 详细的解 ...

  9. 转-调用HTMLTestRunner生成的报告中不能显示用例中print函数的输出

    官方原生的HTMLTestRunner.py支持python2.0版本,python3.0版本的使用需要做一些修改: Python3调用HTMLTestRunner执行用例生成测试报告中,不能正常显示 ...

  10. 将windows下的文件上传到Linux服务器上

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lx_Frolf/article/deta ...