之前还是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等情况下。