返回介绍

5.2.7 递归函数

发布于 2025-01-30 22:11:32 字数 1893 浏览 0 评论 0 收藏 0

递归函数,递归只是一个名字,而递归函数的规定:函数体内调用函数自己。

这需要一定的思维理解深度,本章学习过程当中,如果你实在是有思维无法跟上的地方,可以跳过本章不用学习。

因为,实际工作中,用递归有用到,但是使用量不会很大。递归在实际工作中主要是用在:文件和文件夹操作的时候有使用到。

解决办法:
万一你的思维跟不上本章,你可以直接了解本块的原理后,用现成的文件和文件夹处理函数或文件处理类就可以。

我说几个思维上的盲区:

  1. 代码是从上到下执行的,所有代码没有 exit 等停止符,函数必须执行完。
  2. 如果函数从函数 A 跳至函数 B 后,必须把函数 B 执行完成再执行函数 A 余下的代码。
  3. 递归函数必须要能执行完有结束条件,不然函数就会限入死循环。函数会永远的自我执行下去。

我们来写一代码码来理解一下:

<?php

$num = 10;

//调用一次函数 A();
A($num);

function A( $arg ){

echo $arg;

//在函数 A 里面去,跑去执行函数 B 去了
B($arg);

echo '我们需要不断的努力,努力到上天都为我们感动';

echo $arg.'<br />';
}

function B( $number ){

  echo $number;

  echo '俺是狗蛋,执行完了<br />';

}

?>

通过上例大家会发现:

  1. 执行函数 A 到一半的时候,跑去执行了函数 B
  2. 执行完函数 B,先显示出来的是:“俺是狗蛋,执行完了”,接着显示的才是:“我们需要不断的努力,努力到上天都为我们感动”
  3. 也就是证明了我们所说思维盲区里面的内容,代码从上到下执行,代码必须执行完。

我们来写一个简单的递归代码,让函数自己调用自己。

<?php

$n = 2;

function dg( $n ){

echo $n.'<br />';

$n = $n - 1;

if($n > 0){
  //在函数体内调用了 dg 自己哟
  dg($n);

}else{

  echo '--------------';
}

echo '俺是狗蛋,俺还没执行' . $n . '<br />';

}

dg($n);
?>

你猜猜显示结果是什么?为什么这样?

我们来仔细推理一次:

  1. 第一次调用 dg(),将数字$n = 2 传到 dg 中,先显示出来了 2
  2. 然后将$n - 1 $n 的值为了 1
  3. 接着判断$n 是否大于 0,肯定是大于 0 的,所以调用递归自己,再把自己执行一次。
  4. 而第二次在执行自己 dg() 的时候,而最下面的 echo '俺是狗蛋,俺还没执行' . $n . '
    ';
    还没有执行到。等待执行完成后再来执行
  5. $n 此时等于 1 ,所以显示出来 1。
  6. $n 把自己减了一次,$n 的结果为 0
  7. $n 大于 0 肯定不成立的,所以显示了一条:"--------------"
  8. 而这个时候该执行:echo '俺是狗蛋,俺还没执行' . $n . '
    ';
  9. 第二次执行 dg() 执行完成。第一次 dg() 的代码还没执行完,将第 4 点中的余下代码执行完。

上面的,我们就将运行结果推导完了,我们接下来,看看效果:

document/2015-08-16/55d03fa56b605

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文