php 递归的简单使用

来源:互联网 发布:数据库日志被截断 编辑:程序博客网 时间:2024/05/21 20:27

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

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

<?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/>";

参考文章

0 0
原创粉丝点击