php 不使用pow()函数的指数

eaf3rand  于 2022-12-02  发布在  PHP
关注(0)|答案(8)|浏览(133)

例如,pow(3,3)返回27
我尝试了whilefor循环。我错过了一些明显的东西。只是不确定它是什么。有人能告诉我这个吗?

$i = 1; 
while ($i <= $exponent) {
    $result = ($base * $base);
    $result = $result * $result;
    $i++;   
    echo $result;
}
vxqlmq5t

vxqlmq5t1#

我真的不知道如何描述这里的错误, -你的代码对于计算指数没有意义。从1开始,乘以基数$exponent次。

$result = 1;

for ($i = 0; $i < $exponent; $i++) {
    $result *= $base;
}

echo $result;
92dk7w1h

92dk7w1h2#

下面是非常有效的幂函数的递归伪代码:-

pow(a,b) {

    if(b==0) return 1

    temp = pow(a,b/2)

    if(b%2==0)
      return(temp*temp)

    else return(a*temp*temp)

  }

上面的代码比for循环更直观&时间复杂度为O(logb)
我不熟悉php语法。

rslzwgfq

rslzwgfq3#

你想把一个数乘以基数exponent--这样就可以了:

function myPow($base, $exponent) {
  $result = 1;
  for($ii = 0; $ii < $exponent; $ii++) {
    $result *= $base;
  }
  return $result;
}

已编辑-刚刚注意到php标记...

nue99wik

nue99wik4#

有一个身份你可以使用。

xy=ey×ln(x)

不知道如何翻译成php。

ruarlubt

ruarlubt5#

$x = 3; // 3*3*3*3*3  => 5 time 
$n = 5;
$res = 1;
for ($i = 0; $i < $n; $i++)//i need 5time repeat
    {
    $res *= $x;
        //in here important
        // first time $res = 1 and $x = 3 ---> $res * $x --> 1*3 = 3
        //secend time $res = 3 and $x = 3 ---> $res * $x --> 3*3 = 9
        //next        $res = 9 and $x = 3 ---> $res * $x --> 9*3 = 27
        //next       $res = 27 and $x = 3 ---> $res * $x -> 27*3 = 81
        //final time $res = 81 and $x = 3 ---> $res * $x -> 81*3 = 243
    }
echo $res;
///// Output : 243
i86rm4rw

i86rm4rw6#

此函数还应注意可能的负指数

function pow($num, $x)
{
    if ($x == 0) return 1;
    else if ($x > 0) return $num * pow($num, --$x);
    else return 1 / $num * pow($num, ++$x);
}

幂(2,3)等于8
乘方(2,-3)等于0.125

nwsw7zdq

nwsw7zdq7#

function power($a,$b)
{
    if ($b==0) return 1;
    if ($b==1) return $a;
    if ($b%2==0) return power ($a*$a,$b/2);
    return $a*power($a*$a,($b-1)/2);
}

$total= power(2,16);'

可能是个不守规矩的人

brgchamk

brgchamk8#

不使用pow()函数和乘法(*)因子的指数。如果幂为浮点数,则不适用。

echo userPower(5, -2); //0.04
echo userPower(5, 2); //125

function userPower(int $base, int $power)
{
    $pow =  $power < 0 ? abs($power) : $power;
    $x = $y = $base;
    for ($i = 1; $i < $pow; $i++) {
        for ($j = 1; $j < $base; $j++) {
            $x += $y;
        }
        $y = $x;
    }
    return $power < 0 ? 1 / $y : $y;
}

相关问题