求大神讲解一下 两个递归自己调自己是怎么执行的。跪求!!!
function go($x, $y)
{
if ($x == 0 && $y == 0) {
return 0;
} else if ($x == 0 || $y == 0) {
return 1;
}
$result = go($x, $y - 1) + go($x - 1, $y);
return $result;
}
echo go(3, 4);
首先这个写法是有误的,原点应该是第一行第一列,也就是 x=1,y=1,而不是x=0,y=0;
比如你去第二行第二列,上面答案是6,实际上就两种走法;
这个是简单的经典递归算法;
可以把” 递归 “比喻成 “查字典 “,当你查一个词,发现这个词的解释中某个词仍然不懂,于是你开始查这第二个词。
可惜,第二个词里仍然有不懂的词,于是查第三个词,这样查下去,直到有一个词的解释是你完全能看懂的,那么递归走到了尽头,然后你开始后退,逐个明白之前查过的每一个词,最终,你明白了最开始那个词的意思(摘抄);
return 是终止条件,终止之后层层返回,以这个为例:
如果x=1,y=1时表示已经到原点了,没有路线了返回0;
如果x或者y等于1,表示任意到达一个边,这时只剩一种走法,返回1;
递归需要自己理解,多多练习,另外不要试图去还原极深层次的运算流程,因为它是相同运算逻辑的循环,你只需要明白两层即可;