设为首页 收藏本站
查看: 917|回复: 0

[经验分享] PHP有关函数的编程思想(递归与迭代)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-19 09:29:30 | 显示全部楼层 |阅读模式
PHP有关函数的编程思想(递归与迭代)


递归思想(递归函数):
    递归思想的一个基本形式是:在一个函数中,有至少一条语句,会去调用该函数自身。

    但是从代码角度来说,如果单纯是函数内部调用函数,则会出现“出不来”的现象。

    则我们就必须再来解决下一个问题:怎么终止(停止)这种自身的调用 -- 找到递归函数的出口

    wKiom1ZL_2TDo7XJAAAvF9Lvorc026.jpg

案例分析:写一个递归函数,该函数可以计算一个正整数的阶乘
    数学基础:

        A:1的阶乘是1

        B:大于1的数的阶乘是这个数减1的数的阶乘,乘以该数的结果。

比如:要求6的阶乘:则定义一个函数jiecheng() {......};该函数可以计算n的阶乘
    wKioL1ZMB9iTC4COAABxH9M0K6k184.jpg

递归思想的总结:
    为了解决一个“大”问题,根据现实逻辑,该问题可以通过比它小一级的同类问题的答案而“轻松得到”。小一级的问题又可以通过更小一级的问题而轻松得到,依次类推 -- 直到“最小问题”,通常就是一个已知数(已知答案)。

递归思想的图示:
    wKiom1ZMCnuhfJHQAAA5o_w02qQ486.jpg

迭代思想(递推思想):

    递推思想本身并不跟函数有直接关系(虽然常常写在函数中)

    其基本思路为:

        为了解决一个“大”问题,根据现实逻辑,如果能够找到同类问题的一个“最小问题”的答案(通常是已知的),并且根据已知算法,又可以因此得到比最小问题“大一级”问题的答案。而且,依次类推,又可以得到再大一级问题的答案。最终就可以得到“最大那个问题”(即要解决的问题)的答案。
    可见,该思想的过程依赖于2个条件:

        1:可知同类最小问题的答案

        2:大一级问题的答案可以通过小一级问题的答案经过简单运算规则而得到。


    此思想的解题思路是:从小到大。对比递归思想是:从大到小,再回归到大。

举例:求斐波那契数列的第n项的值:
斐波那契数列(Fibonacci Sequence)的规则是:某项的值是其前两项的值的和。前几项的值为:1,1,2,3,5,8,13,21......(前两项是已知的)
wKiom1ZMEF6yj3qIAACEM8snDA8918.jpg

递推算法的图示:
wKioL1ZMEYzBQTDMAAA7rqYAMYE574.jpg
总结比较:
    1:很多问题,用递归和递推都可以解决。
    2:有些问题只能用递归

    3:如果两种方法都可以解决,推荐使用递推 -- 效率高很多!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-141005-1-1.html 上篇帖子: PHP 特殊方法 __set()、__get() 下篇帖子: PHP 类的访问控制与封装private修饰符
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表