递归的理解(结合八皇后问题)

 

假设我们用递归来算阶乘 f(n)

递归的理解(结合八皇后问题)

f 里面用到了 f,怎么理解呢?

很简单,把式子展开即可:

 

递归的理解(结合八皇后问题)

递归的理解(结合八皇后问题)

先递进,再回归——这就是「递归」

 

 比喻的理解

查字典的比喻挺好的。

想象用一本纯英文词典查单词,要查某一个单词的意思

翻到这个单词时,看解释,发现解释中有一个单词不认识

所以,无法明白这个要查的单词是什么意思;

这时,再用这本词典(函数本身)查那个不认识的单词,又发现查的第2个单词的解释中又有一个单词不认识,那么,又再用这本词典查第3个不认识的单词

这样,一个一个查下去,直到解释中所有单词都认识,这样就到底了,就明白了最后一个单词是什么意思,

然后一层一层倒回来就知道我最初想查的第1个单词是什么意思了,问题就解决了。

 

在返回的时候,剩下未运行符合条件的代码会继续执行的

 

递归需要遵守的规则

(1)

(2)执行一个方法,会生成一个独立的栈空间

(3)局部变量是对立的,不会相互影响

(4)方法中使用的是引用类型变量,就会共享该引用类型的数据

(5)必须向退出递归的条件逼近(敲重点),否则就是无限递归

(6)当一个方法执行完毕或者遇到return就会返回遵守谁调用,就将结果返回谁,同时当方法执行完毕或者返回时,该方法也执行完毕

递归的理解(结合八皇后问题)

在返回的时候,剩下未运行符合条件的代码会继续执行的

 

递归返回详解

/*比如第一个正确摆法确定了,最后一个皇后位置在i==3,此时return返回到check(n+1);这里

*此时if语句块中代码执行完,接着for循环,此时i==3<max 继续执行未执行完的代码,继续进行for循环

*i++,i==4判断不冲突,然后再返回到check(n+1);这里

*i++直到最后一个八皇后没有合适的位置,再返回到上一层,即倒数第二个八皇后

*一直重复,直到放在第一列的所有正确解,全部得到.

*

*然后再从第二个位置开始,重复以上步骤*/

 

递归的理解(结合八皇后问题)