如何使用 PHP 创建自己的 pow 函数?

Posted

技术标签:

【中文标题】如何使用 PHP 创建自己的 pow 函数?【英文标题】:How I can create my own pow function using PHP? 【发布时间】:2015-06-10 12:40:29 【问题描述】:

我想创建一个函数,在其中放入两个值(值及其幂 - 示例函数:multiply(3, 3) 结果27)。到目前为止我已经尝试过但失败了,我使用谷歌搜索但我无法找到任何结果,因为我不知道这个函数的名称。

我到底想要什么:

3,3 => 3 x 3 x 3 = 27 4,4 => 4 x 4 x 4 x 4 = 256

我尝试了什么:

function multiply($value,$power)
    for($x = 1; $x <= $value; $x++ )
        return $c = $value * $power;
       

echo multiply(3,3);

【问题讨论】:

感谢阿德里安更新 【参考方案1】:

答案已经被接受了,但是我不得不来这里说这里的所有答案都使用了错误的算法。还有更好的。包括非常简单的,比如exponentiation by squaring,它将复杂度从 O(power) 降低到 O(log(power))。

这个想法是在将指数除以 2 的同时对底进行平方。例如

3^8 = 9^4 = 81^2 = 6561

当指数为奇数时,有一种特殊情况。在这种情况下,您必须存储一个单独的变量来表示这个因素:

2^10 = 4^5 = 16^2 * 4 = 256 * 4 = 1024

php 不是我的强项之一,但最终的算法很简单:

function multiply($value, $power)
    $free = 1;
    while ($power > 1) 
        if ($power % 2 == 1)
            $free *= $value;
        $value *= $value;
        $power >>= 1; //integer divison by 2
    
    return $value*$free;

echo multiply(3, 3) . "\n";
echo multiply(2, 10) . "\n";
echo multiply(3, 8) . "\n";

【讨论】:

【参考方案2】:

哎呀,再明显不过的问题了。使用名为 pow 的内置函数(在许多语言中)

echo pow(3, 3);

编辑

让我们创建自己的函数。

function raiseToPower($base,$exponent)

    // multiply the base to itself exponent number of times
    $result=1;
    for($i=1;$i<=$exponent;$i++)
    
      $result = $result * $base;  
    
    return $result;

【讨论】:

感谢 Hanky,但我想创建自己的函数。 哎呀,看看编辑。您的函数中的错误是您将底数与指数相乘,而不是与底数本身相乘。【参考方案3】:
function exponent($value,$power)

    $c=1; 
    for($x = 1; $x <= $power; $x++ )
    
        $c = $value * $c;
     
return $c;    

【讨论】:

你吓到我了@ayazkhane ...我刚刚检查了这个并且它工作正常 @habibulhaq 请考虑将函数重命名为其他名称。 multiply 并不意味着这个函数的作用,正如你已经知道的那样,一些不经意的读者可能会误认为它,并认为哦,这段代码是不正确的。另外,当我们对此类操作有通用约定名称时,为什么要给它们指定不同操作的名称:)【参考方案4】: 如果您有 PHP >= 5.6,则可以使用 ** 运算符

$a ** $b 取幂 将 $a 提高到 $b' 次方的结果。

echo 2 ** 3;
如果你有 PHP ,你可以使用 pow:

number pow (number $base, number $exp)

echo pow(2, 3);
你自己的函数是:

function multiply($value, $power) 

    $result = 1;

    for($x = 1; $x <= $power; $x++)
        $result *= $value;
       

    return $result;


echo multiply(3,3);

阅读更多:

http://php.net/manual/en/language.operators.arithmetic.php

http://php.net/manual/en/function.pow.php

【讨论】:

【参考方案5】:

请尝试运行此代码,希望您的问题能够得到解决。 如果您定义任何函数,则必须将其称为返回值。

<?php
    function multiply($value,$exp)
        $temp=1;
        if($exp==0)
            return $temp;
        else
        
             for($i=1;$i<=$exp;$i++)
             $temp=$temp*$value;
             return $temp;
        

    

    echo multiply(5,6);

    ?>

【讨论】:

【参考方案6】:
echo "Enter number (will be mutiplied):".PHP_EOL;
$value = (int) readline("> ");
echo "Enter number for multiplier:".PHP_EOL;
$multiplier = (int) readline("> ");

function power(int $i, int $n):int 
$result =1;
    for ($int = 1; $int < $n; $int++)
        $result *= $i;
    
    return $result;


echo power($value,$multiplier);

【讨论】:

以上是关于如何使用 PHP 创建自己的 pow 函数?的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin:使Java函数可调用中缀

我如何使自己的JavaScript函数具有必需的参数?

Php中使用mkdir如何创建多级目录?

未定义变量时如何优雅地使管道失败

PHP:如何使 INVOKING 内部函数更快

如何使外部定义的函数在 C++ 类中可用?