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

原文地址:https://www.cnblogs.com/wleaves/p/4642839.html