您的位置:首页 > 编程语言 > PHP开发

php 递归的简单使用

2017-04-07 02:16 387 查看
对递归一直都有点蒙,前几天就看了下,博客也是拖了几点,今天才写出来,拖延症又犯了,真不是什么好习惯。

递归,都可以用循环来代替,能写循环尽量写循环,那样好理解点。下面是两个小例子。

<?php
/**
* Created by PhpStorm.
* User: koreyoshi
* Date: 2017/4/7
* Time: 0:45
*/

/*
* 递归
* 递归本意就是自己调用自己
* 递归需要满足条件
* 1.递归必须要有边界条件
* 2.递归前进段和递归返回段,也就是最后得到的值
* 3.当边界条件(递归出口)不满足时,递归前进,当边界条件(递归出口)满足时,递归返回
*
* */

//1 斐波那契数列 1,1,2,3,5,8,13,21,34,55,89,144
//后面的值等于前两个数的和
// f(n) = f(n-1)+f(n-2).

//迭代
function f($n){
$a = 1;
$b = 1;
$v = 0;
for($i=3;$i<=$n;++$i){
$v = $a + $b;
$b = $a;
$a = $v;
}
return $v;
}
$res = f(6);
echo "the res is:".$res;
echo "<br/>";

//n=10  ff(9),ff(8) 54
//n=9  ff(8),ff(7) 34
//n=8  ff(7),ff(6) 21
//n=7  ff(6),ff(5) 13
//n=6  ff(5),ff(4) 8
//n=5  ff(4),ff(3) 5
//n=4 ff(3),ff(2)  3
//n=3 ff(2),ff(1)  2

//关于下面这个递归的理解
//f(10) 不满足条件,需要请求f(9),f(8)
//f(9) 不满足条件,需要请求f(8),f(7)
//f(8) 不满足条件,需要请求f(7),f(6)
//f(7) 不满足条件,需要请求f(6),f(5)
//f(6) 不满足条件,需要请求f(5),f(4)
//f(5) 不满足条件,需要请求f(4),f(3)
//f(4) 不满足条件,需要请求f(3),f(2)
//f(3) 不满足条件,需要请求f(2),f(1)
//f(2),f(1),满足条件了,则f(3),求出来了,回到求f(4)的那一步,f(3)由于已知,只剩下f(2)了,满足条件得到
//那么f(4)的值也得到了,又回到求f(5)的那一步,f(4)已知,那就去求f(3),f(3)又得调f(2),f(1),f(3)也得到了,
//f(5)也得到了,那就回到求f(6)的那一步了,f(5)已经得到,就去调f(4),就这样下去,就得到完整的了。

//递归
function ff($n){
echo "the n is".$n."<br/>";
if($n == 1 | $n == 2){
return 1;
}
$aa = ff($n-1)+ff($n-2);
echo "the aa is".$aa."<br/>";
return $aa;
}
$res = ff(10);
echo "the res is:".$res;
die;
//2.猴子吃桃,每天吃一半,又多吃一个,十天后,剩一个桃,问第一天,有几个桃
//f(n) = f(n-1)*2+1

//迭代
function a($n){
$a = 1;
for($i=9;$i>=$n;$i--){
$a = ($a+1)*2;
}
return $a;
}
$res = a(1);
echo "the res is:".$res;
echo "<br/>";

//递归
function aa($n){
echo "the n is".$n."<br/>";
if($n == 10){
return 1;
}
$a = (aa($n+1)+1)*2;
echo "the a is".$a."<br/>";
return $a;
}
$res = aa(1);
echo "the res is:".$res;
echo "<br/>";


参考文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 递归