PHP有关函数的编程思想(递归与迭代)

PHP有关函数的编程思想(递归与迭代)



递归思想(递归函数):

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

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

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

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

数学基础:

A:1的阶乘是1

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

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

递归思想的总结:

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

递归思想的图示:


迭代思想(递推思想):


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

其基本思路为:

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

可见,该思想的过程依赖于2个条件:

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

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

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


举例:求斐波那契数列的第n项的值:

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

递推算法的图示:

总结比较:

1:很多问题,用递归和递推都可以解决。

2:有些问题只能用递归

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

时间: 2024-11-03 21:37:02

PHP有关函数的编程思想(递归与迭代)的相关文章

编程思想之递归

原文:http://blog.csdn.net/luoweifu/article/details/42472303 我之前写过关于递归算法的博文,但作为编程思想系列的文章不得不再对它进行进一步深入的剖析.因为它是一种简单.常用又重要的一种编程思想. 什么叫递归? 举一个通俗的例子: 有一个8俩重的苹果要你切成重量相等的若干份,每一份的重量不能大于1俩.你肯定会想到这样做: 1.第一刀先把一个苹果切成重量均等的2份A1和A2: 2.再把其中的一份A1切成重量均等的两份A11和A12, 把A2切成均

函数式编程思想:以函数的方式思考,第3部分

过滤.单元测试和代码重用技术 译者:Elaine.Ye原文作者:Neal Ford 发布:2011-07-06 11:23:24挑错 | 查看译者版本 | 收藏本文 在函数式编程思想的第一部分和第二部分中, 我考察了一些函数式编程的主题,研究了这些主题如何与Java?及其相关语言产生关联.本篇文章继续这一探索过程,给出来自前面文章的数字分类器的一个 Scala版本,并会讨论一些颇具学术色彩的主题,比如说局部套用(currying).部分应用(partial application)和递归等. 用

MIT公开课:计算机科学及编程导论 Python 笔记4 函数分解抽象与递归

Lecture4:Decomposition and abstraction through functions:introduction to recursion 函数分解抽象与递归 Functions 函数 block up into modules 分解为模块 suppress detail 忽略细节 create "new primitives" 创建原语的思考方式 w3school Python函数 #example code for finding square roots

编程思想与算法

常用编程思想与算法 本文是在阅读Aditya Bhargava先生算法图解一书所做的总结,文中部分代码引用了原文的代码,在此感谢Aditya Bhargava先生所作出的这么简单的事例,对基础算法感兴趣的朋友可以阅读原文.由于本人也是编程初学者,所以本书比较浅显易懂,所介绍的算法配上插图也十分易懂,这里只是介绍几种最基础的算法由浅入深以帮助理顺一些简单的思维逻辑. 算法简介 算法是一组完成任务的指令.任何代码片段都可视为算法,我们这里讨论的算法要么速度快,要么能解决有趣的问题,要么兼而有之. 二

何为编程思想?

有一个很不错的概念叫做“Unknown Unknown”,意思是如果你不知道一个东西的话,你也不会知道你自己不知道它. 众所周知大家所熟悉的主流编程思想还是面向对象编程,然而,并不是只存在于这一种方式.我们要习惯去怀疑生活工作中的一些既定的理论和方法,没有确凿理论依据的出现,我们还是要相信有其他的情况,只是我们还没有发现它. 面向对象OOP 面向对象的编程思想最大的特色就是可以编写自己所需的数据类型,以更好的解决问题.“类”就是描述了一组有相同特性(属性)和相同行为(方法)的集合. 抽象成了其中

编程思想之多线程与多进程(4)——C++中的多线程

<编程思想之多线程与多进程(1)--以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,<编程思想之多线程与多进程(2)--线程优先级与线程安全>一文讲了线程安全(各种同步锁)和优先级,这是多线程学习必须了解的基础.本文将接着讲一下C++中多线程程序的开发.这里主要讲Windows平台线程的用法,创建线程要调用windows API的CreateThread方法. 创建线程 在Windows平台,Windows API提供了对多线程的支持.前面进程和

编程思想之消息机制

编程思想之消息机制 消息机制 从一个剧情开始 路遥的<平凡的世界>因为翻拍成电视剧,又再次火起来了!我们就从这里开始吧,其小说是以这样一个场景开头的: 在一个半山腰县立高中的大院坝里,在一个校园内的南墙根下,按班级排起了十几个纵队的年轻男女,各班的值日生正忙碌地给众人分发饭菜-- 菜分为甲.乙.丙三等,甲菜以土豆.白菜.粉条为主,还有可人大肉片,乙菜没有肉,丙菜只有清水煮白萝卜.主食也分为三等:白面馍,玉米面馍,高粱面馍,白.黄.黑分别代表了三种差别,学生们戏称欧洲.亚洲.非洲.每个人的饭菜都

Java编程思想重点笔记(Java开发必看)

Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面 试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理解题(比如is-a关系和has-a关系的区别),也有深入的涉及RTTI和JVM底层 反编译知识. 1. Java中的多态性理解(注意与C++区分) Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意

【C/C++学院】0816-引用包装器/仿函数/转义字符 R”()”/using别名/模板元编程 比递归优化/智能指针/多线程/静态断言以及调试技能的要求 assert

引用包装器  std::ref(变量) #include<iostream> template<class T> void com(T arg)//模板函数,引用无效,引用包装器 { std::cout <<"com ="<< &arg << "\n"; arg++; } void main() { int count = 10; int & rcount = count; com(coun