前言
我眼中的递归在以前是比较复杂的,即使是现在有时也会比较凌乱,不知道为什么正确和错误。但是我会说说我眼中的递归,并不是为了大家而是为了自己有个表达的窗口。
为什么递归比较难理解
我觉得主要是不够聪明,对的就是不够聪明。试想一下,假设你足够聪明的话,你还不马上就想出这层层下去的递归吗?但是我们可以尝试其他的方法也能达到别人的高度,那就是关心递归的边界条件和非边界逻辑,弄清楚这几个东西就能得到我们想要的结果了,剩下的的数学归纳法就会得出正确答案(前提你得先写对)。除此之外,要深层次的理解递归还需要理解程序的数据结构堆栈,尤其是在程序运行的时候,这个电脑是怎么处理对程序是怎么处理的。
递归在什么情况下使用
当我遇到子问题和原问题是相似的,但是子问题的结果是需要放回的,这个时候就可以使用了。比如说阶乘这个最简单的问题,我们当然可以考虑for循环,但是我们这个也可以使用递归。像下面这个简单的代码,我们在pythontutor.com/visualize.h…这个网站试着运行,然后就可以发现n从4到1,然后返回阶乘的和,这就是一个最简单的递归使用情况。
public static int factorial(int n)
{
if (n==1)//边界条件
{
return 1;
}
return n*factorial(n-1);
}
总结
递归不要去像子问题,而是去考虑边界条件和非边界逻辑的处理。今天讲的比较简单,下次讲二叉树这个经典模型。