递归应用之PHP演示

来源:互联网 发布:花生壳ddns 免费域名 编辑:程序博客网 时间:2024/04/30 15:20

<?php

/*hl-s

    ============递归求和Demo==========

    *1.判断是否为最后一次调用

    *2.如果不是则继续递归调用

    *3.如果是则返回1

    ===============================

hl-e*/

/*

    function sum($i) {

        if($i>0){

            echo $i.'<br>';

            return $i*sum($i-1);

        }else{

            return 1;

        }

    }

    $a = sum(9);

    echo $a;

*/

 

//-------------------------------------------------------------------------------------------------------------------------------------------------//

 

/*hl-s

    ============折半算法Demo==========

    *1.当数组中间值等于最小值时候,则到最后递归,对最后的$mid判断是否等于$k

    *2.如果查找的值大于中间值则在右边

    *3.如果查找的值大于中间值则在左边

    *4.为什么在程序中用“+”,就会报错?

    ===============================

hl-e*/

 

    function binserch($arr, $min, $max, $k) {

        $mid = intval(($min+$max)/2);                //此处用+就会报错

 

        if($mid==$min){

                if($arr[$mid]==$k){

                    echo '找到查询值!';

                }else{

                    echo '未找到查询值!';

                }

        }else{

            if($arr[$mid]==$k){

                echo '找到查询值!';

            }elseif($k>$arr[$mid]){

                binserch($arr, $mid+1, $max, $k);

            }elseif($k<$arr[$mid]){

                binserch($arr, $min, $mid-1, $k);

            }

        }

    }

 

    $arr = array(1, 3, 4, 6, 8, 11, 18);

    $k1 = 1;

    $k2 = 6;

    $k3 = 11;

    $k4 = 20;

    $k5 = 7;

    $min = 0;

    $max = count($arr)-1;

 

    binserch($arr, $min, $max, $k1);

    echo '<br>';

    binserch($arr, $min, $max, $k2);

    echo '<br>';

    binserch($arr, $min, $max, $k3);

    echo '<br>';

    binserch($arr, $min, $max, $k4);

    echo '<br>';

    binserch($arr, $min, $max, $k5);

 

//-------------------------------------------------------------------------------------------------------------------------------------------------//

 

/*hl-s

    ============汉诺塔Demo============

    *1.把A上n-1个盘通过C移动到B

    *2.把A上盘移动到C

    *3.把B上n-1个盘通过A移动到C

    ===============================

hl-e*/

    function hannuota($n, $a, $b, $c) {

        if($n==1){

            echo "将编号为$n从$a移到$c";

        }else{

            hannuota($n-1, $a, $c, $b);

            echo "将编号为$n从$a移到$c";

            hannuota($n-1, $b, $a, $c);

        }

    }

    hannuota(5, 'a', 'b', 'c');

?>

  注:汉诺塔的代码运行会报错!知道的望告知原因.不胜感激.

原创粉丝点击