zoukankan      html  css  js  c++  java
  • 【狂神说Java学习笔记】阶段一JavaSE基础(七)递归

    笔记内容:狂神说Java阶段一Java基础视频P50
    狂神说Java视频链接


    目录

    1、递归要素
    2、递归练习


    1、递归要素

    • 递归:什么时候不调用自身方法。如果没有头,将陷入死循环。
    • 递归:什么时候需要调用自身方法
    test.test();		//main中调用
    
    public void test(){	//没有头会报错,栈溢出
          if(...){return...}      //递归头
          test();                 //递归体
    }
    

    2、递归练习

    计算5!

    //main
    public static out println(f(5));
    
    //f(n)方法
    public static int f(int n) {
            if (n == 1) {      //因为1没有办法再减1了,否则乘出来的结果是0,所以要作为单独的情况考虑
                return 1;
            }else {
                return n*f(n-1);
            }
        }
    
    >>>
    120
    

    对于代码的理解:
    我最开始学递归的时候,总觉得是每一次计算出当下的数,再套下一层继续计算。比如先计算出54=20,再用203,以此类推。但实际上递归是先层层调用函数,把所有的函数都映射为具体数值再做运算。

    比如在这里,代码运行到rerurn n*f(n-1);这句话,会先变成return 5*f(5-1),结果代码发现f(4)挡在这里不知道什么东西,没法计算,它就会继续去调用f(4),变成return 5*4*f(4-1),……,一直把所有括号都拆开,写成return 5*4*3*2*1,这时候代码就清楚了,没啥需要进一步拆解的了,可以轻轻松松一口气计算出来。

    所以所谓递归递归,就是不停拆括号这样一个层层叠叠拆解方法的过程。

    图解如下:

  • 相关阅读:
    Ubuntu Server下docker实战 02: docker进阶配置
    Ubuntu Server下docker实战 01: 安装docker
    简单一个方法实现商品组合管理--递归笛卡尔
    Little-Endian小字节序
    BinaryWriter和BinaryReader用法
    C#位运算
    TCP协议三次握手过程分析
    简述HTTP过程
    c# 版贪食蛇
    今日头条列表json
  • 原文地址:https://www.cnblogs.com/lanlynn/p/13473785.html
Copyright © 2011-2022 走看看