zoukankan      html  css  js  c++  java
  • 尚硅谷面试第一季-05递归与迭代

    引出问题:

    递归分析:

    递归实现代码:

     1 package 递归与迭代;
     2 
     3 import org.junit.jupiter.api.Test;
     4 
     5 /**
     6  * @author zsh
     7  * @company wlgzs
     8  * @create 2019-03-27 15:58
     9  * @Describe 递归实现
    10  * 有n阶台阶,1次只能上一步或者2步,有多少种走法
    11  * 递归
    12  * 迭代
    13  */
    14 public class TestStep {
    15     @Test
    16     public void test() {
    17         long start = System.currentTimeMillis();
    18         System.out.println(f(40)); //165580141
    19         long end = System.currentTimeMillis();
    20         System.out.println(end - start); //640ms
    21     }
    22 
    23     //递归实现f(n):求n步台阶,一共有几种走法
    24     public int f(int n) {
    25         if (n < 1) {
    26             throw new IllegalArgumentException(n + "不能小于1");
    27         }
    28         if (n == 1 || n == 2) {
    29             return n;
    30         }
    31         return f(n - 1) + f(n - 2);
    32     }
    33 
    34 }

    运行结果:

     迭代分析:

    迭代代码:

     1 package 递归与迭代;
     2 
     3 import org.junit.jupiter.api.Test;
     4 
     5 /**
     6  * @author zsh
     7  * @company wlgzs
     8  * @create 2019-03-27 16:16
     9  * @Describe 迭代实现
    10  * 有n阶台阶,1次只能上一步或者2步,有多少种走法
    11  * 递归
    12  * 迭代
    13  */
    14 public class TestStep2 {
    15 
    16     @Test
    17     public void test() {
    18         long start = System.currentTimeMillis();
    19         System.out.println(loop(40)); //165580141
    20         long end = System.currentTimeMillis();
    21         System.out.println(end - start); //<1ms
    22     }
    23 
    24     public int loop(int n) {
    25         if (n < 1) {
    26             throw new IllegalArgumentException(n + "不能小于1");
    27         }
    28         if (n == 1 || n == 2) {
    29             return n;
    30         }
    31         int one = 2; //走到第二级台阶的初始化值
    32         int two = 1; //走到第一级台阶的初始化值
    33         int sum = 0;
    34 
    35         //最后跨两步+最后跨一步的走法
    36         for (int i = 3; i <= n; i++) {
    37             sum = two + one;
    38             two = one;
    39             one = sum;
    40         }
    41         return sum;
    42     }
    43 }

    运行结果:

    小结:

  • 相关阅读:
    数据挖掘实践(34):实战--高潜用户购买画像(三)特征工程
    数据挖掘实践(33):实战--高潜用户购买画像(二)EDA/探索性数据分析
    数据挖掘实践(32):实战--高潜用户购买画像(一)数据清洗
    Java 流程控制 之 顺序结构
    Java 之 运算符
    Java 之 变量
    Handmade Rust Part 1: Introduction & Allocators
    rust 强制转换
    引用与借用
    candidate #1: `std::clone::Clone`
  • 原文地址:https://www.cnblogs.com/zsh-blogs/p/10608495.html
Copyright © 2011-2022 走看看