经典问题:3X4的方格 从左上角A走到右下角B 只能向右向下走 一共有多少种走法
求大神讲解一下 两个递归自己调自己是怎么执行的。跪求!!!
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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
首先这个写法是有误的,原点应该是第一行第一列,也就是 x=1,y=1,而不是x=0,y=0;
比如你去第二行第二列,上面答案是6,实际上就两种走法;
这个是简单的经典递归算法;
可以把” 递归 “比喻成 “查字典 “,当你查一个词,发现这个词的解释中某个词仍然不懂,于是你开始查这第二个词。
可惜,第二个词里仍然有不懂的词,于是查第三个词,这样查下去,直到有一个词的解释是你完全能看懂的,那么递归走到了尽头,然后你开始后退,逐个明白之前查过的每一个词,最终,你明白了最开始那个词的意思(摘抄);
return 是终止条件,终止之后层层返回,以这个为例:
如果x=1,y=1时表示已经到原点了,没有路线了返回0;
如果x或者y等于1,表示任意到达一个边,这时只剩一种走法,返回1;
递归需要自己理解,多多练习,另外不要试图去还原极深层次的运算流程,因为它是相同运算逻辑的循环,你只需要明白两层即可;
所以这里为什么要用递归的写法?
根据您的问题我写了一篇文章,有详细的介绍:https://segmentfault.com/a/11...
这是经典的动态规划问题,用动态规划,比递归要好,递归还要考虑递归深度的问题