标签:题目 递归调用 灵活 ram for 应该 理解 如何 传值
这些天学习了PHP的核心编程语法,PHP核心语法概括起来不多,大致分为php标签,语法规范、数据类型、变量、常量、当然还有预定义的,还有操作符、循坏等等,最后几天学习了函数,其中数组的常用函数非常多。例如array_merge、rand、asort、arsort这些,在日后项目中会用的比较多。
数组的函数里,foreach()与while-list-each()两个遍历数组的函数最为强大,不仅能解决访问数组的问题,而且它的返回值各有特点,可以灵活运用在往后数据库数据的处理中。
平时的应用PHP语言的实操中,我认为比较难一点的就是递归,它比迭代在理解上要难一点,迭代的原理跟常用的for循坏差不多,但是递归却不一样,递归难就难在递归的出口如何定义,什么时候定义,定义的条件应该是怎样,好比“斐波那契数列”那一道经典的题目:
<?php
/**
* 斐波那契数列
* @param int $n 数列的项数
* @return int $s 数列的最后一项的值
*/
function f($n) {
// 递归出口
if($n == 1 || $n == 2) {
return 1;
}
// 递归点
$s = f($n - 1) + f($n - 2);
return $s;
}
// 调用函数并输出
echo f($_GET[‘n‘]);
刚刚接触递归时遇到这个算术题,在递归出口那里有点混了,主要是反应不过来递归点的f($n-1)与f($n-2)这两个函数调用里的值怎么求出来,即使知道它是一层一层往下算直到n=1和2时候会返回一个值,然后电脑进行往回的计算,但是一开始我却陷入了自己的不好的理解,就是递归点的两个函数重新回去后是经过怎样的计算。但是后来的话,我在午饭的时候想了好几次,搞明白了是当n赋值给形参时,不满足出口条件,就往下变为n-1与n-2两个数相加,但是这两个数是未知的,只有n=1和n=2时的值才是确定的1,所以只能继续调用函数,将n-1重新传值给函数形参,那么n-1,就会变为n-2与n-3这两个值的相加,然后继续下去,总算是解决了这个函数递归点的真正意义,当然递归出口还是一个很重要的逻辑问题,虽然不知道工作中会不会用得多,但是我还是会继续探讨函数的递归调用,因为这个点让我产生了很多疑问与求知欲,递归还能处理怎样各式各样的问题呢?
标签:题目 递归调用 灵活 ram for 应该 理解 如何 传值
原文地址:http://www.cnblogs.com/xieyaojin/p/6091670.html