【发布时间】:2011-10-27 03:26:54
【问题描述】:
我尝试玩php,但是我卡在一个地方,我测试了$n = 1024的值,然后需要60多秒,所以出现php超时错误,我不知道如何克服这个问题,如果我唯一的要求是在 20 + ---+ 2n 表单中显示任何输入数字。
用 n=121 尝试下面的代码,我得到了这个,但我希望在 2n 中也代表 57
表单,所以我尝试了递归,但没有奏效。
看看如何给定编号。以“2”的幂表示:
20 + 21 + 22 + 2 + 24+ 25 + 26+ 57
代码:
<?php
echo("see how a given no. be represented in powers of '2' :<br/>\n");
$n=121;
$two_pow=array(
pow(2,0),pow(2,1),pow(2,2),pow(2,3),pow(2,4),pow(2,5),
pow(2,6),pow(2,7),pow(2,8),pow(2,9),pow(2,10)
);
//print_r($two_pow);
$i=0;
while($n>=$two_pow[$i])
$i++;
/* displaying 2^3*/
if($i>0)
$ij=$i-1;
/* diplaying difference of give N and 2^i*/
$diff=$n-$two_pow[$ij];
if($n>0)
{
for($i=0;$i<=$ij;$i++)
{
echo("2<sup> $i </sup>"."+ \n");
if($i==$ij && $diff>0)
{
echo("\n". $diff);
}
}
}
else
echo("<br/>not possible for values less then zero");
?>
【问题讨论】:
-
嗯,是的,这需要时间来计算!你还期待什么?为什么递归“不起作用”?这里有什么问题?
-
你需要建议程序修改,它允许表示任何数字,无论是1还是大于1024。最后,当剩下任何差异时,也希望以 2^n 形式表示,我不知道要实现的正确递归,所以我在这里问像你们这样的专家。
-
投反对票有时会给人一种辱骂的感觉,所以如果你不能回答正确的代码来完成任务,请避免这种情况。
-
废话。如果它值得被否决,我会否决一个答案。我的知识与它无关。你的逆向心理对我不起作用。
标签: php recursion timeout design-patterns