美文网首页
PHP递归使用过程中遇到的问题

PHP递归使用过程中遇到的问题

作者: 缄默_e4a3 | 来源:发表于2020-01-16 12:36 被阅读0次

今天写了一个递归,0-10中随机获取2个不重复的数字结果遇到了坑

public function getRandNum($max=10,$arr = array() ){
        $rand = intval(rand(0,$max));
        if(!in_array($rand, $arr )){
            return $rand;
        }else{
           $this->getRandNum($max,$arr);
        }
    }

其实也不算什么问题,只是自己一时没转过来,后来想通了也就明白了,这其实是一个很低级的错误。但还是记录一下,防止以后再出现这类问题浪费时间

这段代码第一次执行时候没有问题,当$arr里有值的时候再去执行就有可能会出现取到null的情况,是什么原因呢,可以一步一步往下走一遍

比如第一次:$this->getRandNum(10,array());会正常返回一个0-10的值,比如第一次返回1,这时候再去执行第二次$arr里边是有一个值的应该是这样:$this->getRandNum(10,array(1));这个时候就有可能出现还随机到1的情况,这样就会执行else里边的部分。这时候问题就来了,当执行else的时候就会出问题,因为else会再执行一次getRandNum,这时候还会重复上面的流程,如果随机到一个不为1的值,会正常return,否则会继续执行,但这个不管重复多少遍,肯定会有正确返回的情况,这时候最终会返回一个正常的值,但我们在else 里并没有接收这个值,也没有其他操作,到这里就停住了。所以当我们执行完getRandNum的时候实际是收不到返回值的。所以正确的应该是这样:

public function getRandNum($max=10,$arr = array() ){

        $rand = intval(rand(0,$max));

        if(!in_array($rand, $arr )){

            return $rand;

        }else{

           return  $this->getRandNum($max,$arr);

        }

    }

在else里加一个return,当执行else的时候,最终我们也会接收到一个正确的返回值,直接返回就行了。

相关文章

  • PHP递归使用过程中遇到的问题

    今天写了一个递归,0-10中随机获取2个不重复的数字结果遇到了坑 public function getRandN...

  • php递归堆栈简介

    php 递归、效率和分析 递归的定义递归(http:/en.wikipedia.org/wiki/Recursiv...

  • PHP递归

    最后输出结果为: 321

  • php 引用遇到的问题

    最近遇到这样的问题 第一个foreach 首先理解&,它指向变量的内存地址,可以理解为C语言中的指针。ok ,先看...

  • Python中递归的最大次数(转)2018-06-14

    Python中递归的最大次数 实际应用中遇到了一个python递归调用的问题,报错如下:RuntimeError:...

  • 递归函数

    将分类递归,上下级排序 【PHP】 【JS】

  • 递归模型

    递归模型 本章节,我们共同去解决大学阶段遇到的递归问题,是如何执行代码的。 这里我将用三种方式去剖析递归执行顺序 ...

  • 2017-09-13

    宇飞来F9在使用过程中遇到的问题如何解决?

  • Django中通过对象.模型类小写_set访问一对多模型

    在使用过程中,遇到了如下问题:'RelatedManager' object is not iterable 解决...

  • Js递归数组展平

    遇到多个嵌套的数组,将嵌套的数组中的元素全部展开到最外层的数组中,可以使用递归来解决这个问题。 什么是递归? 递归...

网友评论

      本文标题:PHP递归使用过程中遇到的问题

      本文链接:https://www.haomeiwen.com/subject/cudfcxtx.html