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等情况下。

  • 相关阅读:
    linux 命令——48 watch (转)
    linux 命令——47 iostat (转)
    linux 命令——46 vmstat(转)
    linux 命令——45 free(转)
    linux 命令——44 top (转)
    linux 命令——43 killall(转)
    linux 命令——42 kill (转)
    linux 命令——41 ps(转)
    linux 命令——40 wc (转)
    Java for LeetCode 068 Text Justification
  • 原文地址:https://www.cnblogs.com/wleaves/p/4642839.html
Copyright © 2011-2022 走看看