PHP递归与迭代

PHP 中,我们经常会遇到这样的情况:在面临一个庞大的问题时,需要把这个庞大的问题拆分成各个细小的单元,解决了每个细小单元的问题,这个庞大的问题便迎刃而解了。递归与迭代就是这种思想的体现。

PHP 递归

递归就是程序调用自身、函数不断引用自身,直到引用的对象已知。构成递归需满足以下两个条件:

  • 子问题需与原始问题为同样的事,且更为简单。
  • 不能无限制地调用本身,必须有一个出口,化简为非递归状况处理。

例如,斐波那契数列:1,1,2,3,5,8……

斐波那契数列的特点是第 0 位(在计算机中习惯以 0 开始计数)和第 1 位的数字都是 1,从第 2 位开始,当前数字的值是前两位数值之和,可以用如下的公式表示:

f(0)=1
f(1)=1
f(n)=f(n-1)+f(n-2){n>1}

用 PHP 实现递归求斐波那契数列的代码如下:

  1. <?php
  2. function readd($n){
  3. if($n>2){
  4. $arr[$n] = readd($n-2) + readd($n-1); // 递归调用自身
  5. return $arr[$n];
  6. } else {
  7. return 1;
  8. }
  9. }
  10. echo readd(30);
  11. ?>

readd() 函数封装了求斐波那契数列的方法,向函数中传递不同的数字将会求出对应位置的数列的值。

PHP 迭代

迭代就是利用变量的原值推算出变量的一个新值。下面用一个简单的例子说明迭代:

  1. <?php
  2. function diedai($n){
  3. for ($i=0,$j=0; $i < $n; $i++) {
  4. $j = $j + $i;
  5. }
  6. return $j;
  7. }
  8. echo diedai(4);
  9. ?>
(0)

相关推荐

  • Python 编程别再用递归了

    递归函数使用起来非常酷,简洁优雅,可以用来炫耀编程技巧.但是,在大多数情况下,递归函数具有非常高的时间和空间复杂性,我们应该避免使用它.更好的解决方案之一是在可能的情况下使用动态规划,对于能够分解为子 ...

  • 读完这篇算法总结,我感觉自己距离谷歌更近了

    读完这篇算法总结,我感觉自己距离谷歌更近了

  • 斐波那契折返

    斐波那契数列(Fibonacci numbers)是由13世纪的数学家列昂纳多·斐波那契(Leonardo Fibonacci)发现的一个数列.它是从2开始,依次将其与数列中前一个数相加得到.即2+1 ...

  • 斐波那契数列相关的极限和级数问题典型题剖析(二)

    练习题 练习8:证明数列 , , 收敛,并求此极限. 练习9:设 的Maclaurin级数为 ,试证明 练习10:设 为Fibonacci数列,即 求 . 练习11:设 为Fibonacci数列,即 ...

  • 学 Python 怎能不知 yield ?

    简说Python 1周前 以下文章来源于无量测试之道 ,作者无量测试之道  简说Python推荐  来源|无量测试之道 作者|无量测试之道 引言 你可能听说过,带有 yield 的函数在 Python ...

  • Python|递归函数之斐波那契数列

    上一期小编主要针对def函数的运用进行了简单的讲解,本期将会深入探讨def函数的另一种特别有用的函数(递归函数),其定义:如果一个函数在内部调自身,这个函数就是递归函数,递归函数的优点在于其定义简单, ...

  • PHP递归与迭代的区别与联系 筋斗云网络

    递归自身调用自身,每一次调用把问题简化,直到问题解决. 迭代:就是指在某个范围内,反复执行相同工作. 递归: 5只猴子,每只猴子,摘1颗桃,完成1步工作 迭代: 1只猴子,这只儿子,摘5颗桃,完成5步 ...

  • php递归和迭代的区别

    <?php $arr=array( array('id'=>1,'name'=>'河南省','pid'=>0), array('id'=>2,'name'=>'信阳 ...

  • 欧米茄星座的迭代,一部潮流变迁史

    9月中旬,迪奥(Dior)男装设计师Kim Jones,获得了一个新身份, 他将兼任芬迪(Fendi)品牌女装艺术总监. 作为带领街头潮流文化登入奢华殿堂的领军人物,Kim Jones的这一受命被时尚 ...

  • 一所中学课堂改革的迭代

    金锐.牛晓斌 "这位可是三闾大夫吗?我见您行吟泽畔,为何如此颜色憔悴.形容枯槁?" "哎,举世皆浊我独清,众人皆醉我独醒.我宁愿投入湘流,葬于鱼腹之中,也不能让世俗的尘埃 ...

  • 周鸣岐:旅游商业的迭代和未来发展趋势

    迈点网 · 周鸣岐专栏 · 2021-05-04 22:35:23                     一个快速发展的市场在逐渐形成. 旅游商业一直旅游产业链中的"传统弱项", ...

  • Python|利用递归轻松解决数的乘方问题

    问题描述求一个数的乘方,数学公式如下是成立的示例: 我们可以将乘方的运算转换为乘法的运算输入: ,定义 ,b=y/2输出: 解决方案求x的y次方的值,当y是偶数时,最后能转换成两个数相乘,当y是奇数时 ...

  • 包联网 | 专业视角 彭冲:消费迭代,包装共情

    包联网品牌包装名家:彭冲 品赞设计 创始人,中国知名包装设计师,致力于在复杂的商业环境中,以系统化的设计思维为品牌解决竞争中面临的为题.用精准的设计语言,诠释品牌竞争优势差异化,助力品牌在消费者心智中 ...

  • 茅台镇风云(下):全民“染”酱,白酒加速迭代

    一杯茅台镇出产的酱香型白酒,为何在最近几年内迅速席卷全国? 除了"喝了不上头"的消费体验.飞天茅台酒引领的中高端消费需求,更有业内外资本在背后推波助澜. 在不少行业内人士眼里,按目 ...

  • 思考备忘录:投资框架的突破 又一次思维的深度阶跃 最近一段时间,不断思考,不断学习,迭代了投资框架,...

    又一次思维的深度阶跃 最近一段时间,不断思考,不断学习,迭代了投资框架,也修复了一些问题,做一个简单总结记录. 第一,真正的锁定价值观,坚定以成长为核心的投资理念,而不是看似包容性的投资框架,实质上没 ...