递归问题,如果是计算阶乘,按照老师那种写法会返回0;

递归问题,如果是计算阶乘,按照老师那种写法会返回0;

function mycount($a){
if($a>=1){
return $a * mycount($a - 1);
}
}
var_dump (mycount(4));

本意是计算4的阶乘。但是最后返回的是0 ,我个人这么理解的:

当$a=0的时候,不满足条件,根据上节课的说法,函数不可能没有返回值,如果不写默认返回null;

因此 null和前面的数相乘:相当于 4*3*2*1*null;

PHP是弱类型语言,于是null被转换为0;

因为最后得出的是0;

这么理解是正确的吗 ?   

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

您好,并不是判断条件大于等于2的问题,而是return写在if判断语句中,当你的语句判断到你指定的值时,便无法走到if语句里面了,那么也就无法执行return操作,那么此时返回的是函数默认的null。可看下面的代码执行经过的解析:

function mycount($a){
if($a>=1){
return $a * mycount($a - 1);
}
}
var_dump (mycount(4));

mycount函数第一次执行:$a应该为4->进行if判断->为正确->进入if判断,此时第二次调用函数mycount:$a应该为3->进行if判断->为正确->进入if判断,此时第三次调用函数mycount:$a应该为2->进行if判断->为正确->进入if判断,此时第四次调用函数mycount:$a应该为1->进行if判断->为正确->进入if判断,此时第五次调用函数mycount:$a应该为0->进行if判断($a>=1)->为错误>无法进入if判断,那么也就无法执行if语句中的return语句了,因此在var_dump的时候是返回的是函数默认的null。

“最后输出的是0”指的是你的代码执行结果是0.

如果解决了您的问题,请采纳,祝学习愉快!

好帮手慕查理 2018-03-02 11:19:10

您好,你的代码if语句中最后一次调用mycount函数时,$a应为0,那么此时你的$a作为if的判断条件是已经进入不了if语句中了,那么也就无法返回值,因此最后输出的是0。根据你的代码可改为:

function mycount($a){
if($a>1){
return $a * mycount($a - 1);
}
return 1;//在外层返回一下值
}
var_dump (mycount(4));

如果解决了您的问题,请采纳,祝学习愉快!

  • 提问者 西岚Silan #1
    不好意思,我在多问几句。 因为老师说:“如果函数里面不写return则默认返回null”; 当$a为0的时候,他进不了if语句,那就相当于 function mycount($a){ $a=0; }; 没有return,那他就默认返回null,然后数字相乘,null被转换成0; 是不是这个意思? 还有你说的“最后输出的是0”,输出是什么意思?返回值吗?
    2018-03-02 18:35:48
  • 提问者 西岚Silan #2
    我刚才在试了下,如果把条件改为>=2; function mycount($a){ if($a>=2){ return $a * mycount($a - 1); } } var_dump (mycount(4)); 最后得出的值还是0,
    2018-03-02 18:42:16
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师