zoukankan      html  css  js  c++  java
  • 16、(番外)关于递归的再次整理

    之前还是too young too simple了,没把递归弄明白。

    直到面试官问了我这么个问题:

    int digui(int a)
    {
      return digui(a-1)+digui(a-2);
    }
    

    这样代码的编写方式对吗?

    如果是大神级的应该一眼就能说出来了,但是,我经过两个月类似设计师的训练后,全!忘!了!

    也是当时学的太不扎实的缘故,另外递归作为代码编写来说,还是少用为好,虽然学会了,却刻意给忘了。

    这个代码现在来分析的话,存在两个问题:

    1、没有能够跳出循环的条件

    2、有关这个递归的运算问题

    首先递归不能是个死循环的,条件是必不可少的

    在这方面做一个修正后,代码为

            int digui(int a)
            {
                if (//条件)
                {
                    return 1;
                }
                else
                {
                    return digui(a - 1) + digui(a - 2);
                }
            }    

    第二个问题是它的运算顺序。

    对于递归,我认为跟数列是差不多的,等差或者是等比数列,而上面的这个递归则是斐波那契数列的类似的模型,符合了F(n)=F(n-1)+F(n-2)的规律,这是题外话。

    只针对这个函数来说,运算数序是先将digui(a-1)的值求出来,再将digui(a-2)的值求出来,最后相加,也就是递归的次序互不影响。

    ——————————————————————————————分割线——————————————————————————

    简单来说,递归的方法就类似于平常对方法的调用。

    Ex.一个简单的递归

    int digui(int a)

    {

      if(a==2)

      {

        return a;

      }

      else  

      {

        return digui(a);

      }

    }

    首先进入判断,如果不满足条件,这时候就进入了递归的状态,注意:这里并没有跳出digui(a)这个方法

    所以说,在执行到满足条件之后,还会再回到digui(a)这个方法中,也就是所谓的迭代

    这可以用于读取xml文件的nodes等情况下。

  • 相关阅读:
    AOP在Spring Boot中如何使用
    拦截器在Spring Boot中如何使用
    跨域在Spring Boot中如何处理
    @ControllerAdvice
    文件上传之Spring Boot整合web层
    Git和GitHub
    Spring Boot 整合web层之JSON,gson,fastjson的使用
    Spring boot整合视图层
    Spring Boot中的parent是什么?
    网页自动化,验证码识别函数,深度学习训练
  • 原文地址:https://www.cnblogs.com/wleaves/p/4642839.html
Copyright © 2011-2022 走看看