php函数,结果很意外
本文介绍了php函数,结果很意外的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
<?php
function fun($i) {
$i++;
echo $i;
if ($i<5) {
fun($i);
}
echo $i;
}
fun(1);
我以为结果会是:23455,实际上是23455432,请问这个432是什么情况?
解决方案
从函数的实现功能方面考虑,而不考虑回调过程来理解递归.
如果考虑回调过程来理解递归的话,就要分析整个递归过程中的参数和变量,还要记住什么时候被调用函数调用返回到主调用函数,就显得有些麻烦.
对于一些常用的递归函数功能很好描述,如递归求解阶乘
:
<?php
function factorial($n) {
if ($n != 1)
$res = $n * factorial($n-1);
else
$res = 1;
return $res;
}
?>
函数功能就是: 计算 n 的阶乘
, 函数功能实现就是: n 的阶乘 = n * (n-1)的阶乘
.这样理解就不用考虑递归过程中的函数调用问题.
对于题主的函数:
函数功能就是: 输入 n,输出 n+1, 如果 n+1<5,执行 fun(n+1),再输出 n+1
(不好用一个简短的句子描述):
所以根据功能描述,可以得到函数的执行过程,最后得到结果.
执行
fun(1)
: 输入 1, 输出 2, 2+1<5,执行fun(2)
,得到fun(2)
输出的结果,再输出 2.
最终输出: 2[输出(fun(2))]2同样,
fun(2)
输出结果: 3[输出(fun(3))]3
最终输出:23[输出(fun(3))]32同样,
fun(3)
输出结果: 4[输出(fun(4))]4
最终输出:234[输出(fun(4))]432执行
fun(4)
: 由于 4+1<5 判断失败, 不执行fun(5)
,输出结果: 55
最终输出:23455432
这篇关于php函数,结果很意外的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文