分治法求x的y次方

关于分治法

 

<?php
function powerdiv($x, $n)
{
    if($x==1) {
        return 1;
    } elseif ($x==0) {
        return 0;
    }
    if ($n==0) {
        return 1;
    } elseif ($n==1) {
        return $x;
    } elseif ($n%2==0) {
        return powerdiv($x,$n>>1)*powerdiv($x,$n>>1);
    } else {
        return powerdiv($x,($n-1)>>1)*powerdiv($x,($n-1)>>1)*$x;
    }
}
function powercon($x,$n){
    if ($n<0) {
        return 1/powerdiv($x,-$n);
    }else{
        return powerdiv($x,$n);
    }
}

echo powercon(2,2);

 

posted @ 2018-03-01 10:28  netwu  阅读(165)  评论(0编辑  收藏  举报