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

    科技2024-12-13  20

     

    假设我们用递归来算阶乘 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++直到最后一个八皇后没有合适的位置,再返回到上一层,即倒数第二个八皇后

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

    *

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

     

     

     

    Processed: 0.050, SQL: 8