资讯专栏INFORMATION COLUMN

对递归的简单理解

songjz / 2631人阅读

摘要:今天一小伙伴写了一个递归,可以输出要取的值,的却总是,写了一个简单的测试复原一下问题。结果如下代码思路看上去很简单,就递归,不满足条件就返回的值。

今天一小伙伴写了一个递归,echo可以输出要取的值,return的却总是null,写了一个简单的测试复原一下问题。

function test($i)
{
    $i -= 4;
    if ($i > 3) {
        echo $i;
        test($i);
    }
    echo $i;
    return $i;
}
$a=test(30);
var_dump($a);

结果如下:

261014182226
int 26

代码思路看上去很简单,i>3就递归,不满足条件就返回i的值。问题就出在归的过程,最后return的值将会是第一次执行这个函数时(也就是最外层)的值30-4=26。

下面是修改后的递归函数:

function test($i)
{
    $i -= 4;
    if ($i > 3) {
        return test($i);
    }else{
        return $i;
    }
}
$a=test(30);
var_dump($a);

结果是

int 2

当不满足条件时,返回不满足条件的$i,然后这个这个$i将会是递归回去的唯一返回值。如果还是不太明白,下面就以一层递归解释其中到底发生了什么:

function test($i)
{
    $i -= 4;
    if ($i > 3) {
        return test($i);
    }else{
        return $i;
    }
}
$a=test(10);

上面的程序可以理解为:

function test(10)
{
    $i -= 4;
    if ($i > 3) {
               //先执行里面的函数,接收到下面函数的返回值2 ,最终返回2
        return 
                        function test(6)
                        {
                            $i -= 4;
                            if ($i > 3) {
                                return test($i);
                            }else{
                                //此时$i是2,这个函数返回2到上一层函数 
                                return $i;
                            }
                        }
$a=test(10);
    }else{
        return $i;
    }
}
$a=test(10);

三层四层以上就可以自己去想象了,不行就自己动手这样替换递归的函数会更好理解一些。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22198.html

相关文章

  • 数据结构与算法之精讲「递归系列」

    摘要:终止条件递推公式递归的分类通过做大量的题,根据递归解决不同的问题,引申出来的几种解决和思考的方式。我们通过层与层之间的计算关系用递推公式表达出来做计算,经过层层的递归,最终得到结果值。 showImg(https://segmentfault.com/img/remote/1460000019222330); 前言 几个月之前就想写这样一篇文章分享给大家,由于自己有心而力不足,没有把真...

    zhichangterry 评论0 收藏0
  • 【从蛋壳到满天飞】JAVA 数据结构解析和算法实现-链表与递归

    摘要:链表与递归已经从底层完整实现了一个单链表这样的数据结构,并且也依托链表这样的数据结构实现了栈和队列,在实现队列的时候对链表进行了一些改进。计算这个区间内的所有数字之和。 showImg(https://segmentfault.com/img/remote/1460000018597053?w=1832&h=9943); 前言 【从蛋壳到满天飞】JAVA 数据结构解析和算法实现,全部文...

    lastSeries 评论0 收藏0
  • 【从蛋壳到满天飞】JAVA 数据结构解析和算法实现-链表与递归

    摘要:链表与递归已经从底层完整实现了一个单链表这样的数据结构,并且也依托链表这样的数据结构实现了栈和队列,在实现队列的时候对链表进行了一些改进。计算这个区间内的所有数字之和。 showImg(https://segmentfault.com/img/remote/1460000018597053?w=1832&h=9943); 前言 【从蛋壳到满天飞】JAVA 数据结构解析和算法实现,全部文...

    alanoddsoff 评论0 收藏0
  • 从“数学归纳法”到理解递归算法”!

    摘要:前言相信大家在面试或者工作中偶尔会遇到递归算法的提问或者编程,我们今天来聊一聊从数学归纳法到理解递归算法。这种广义的数学归纳法应用于数学逻辑和计算机科学领域,称作结构归纳法。 showImg(https://img-blog.csdnimg.cn/20190426221838971.gif);showImg(https://img-blog.csdnimg.cn/20190429222...

    oogh 评论0 收藏0
  • 递归就这么简单

    摘要:那么,有了循环,为什么还要用递归呢在某些情况下费波纳切数列,汉诺塔,使用递归会比循环简单很多很多话说多了也无益,让我们来感受一下递归吧。 递归介绍 本来预算此章节是继续写快速排序的,然而编写快速排序往往是递归来写的,并且递归可能不是那么好理解,于是就有了这篇文章。 在上面提到了递归这么一个词,递归在程序语言中简单的理解是:方法自己调用自己 递归其实和循环是非常像的,循环都可以改写成递归...

    dreamtecher 评论0 收藏0

发表评论

0条评论

songjz

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<