这是我编码解决我的问题,它可以快速生成第10位数字,我已经 php.ini max-execution-time 更改为 10000 它在一小时内没有得到答案。如何快速/快速地运行此代码。
function fabNumber($n){
if($n==1 || $n==2) {
return 1;
}
return fabNumber($n-2) + fabNumber($n-1);
}
function count_digit($number){
return strlen($number);
}
$i = 1;
$count = 1;
while( $count != 1000){
$fab_number = fabNumber($i);
$count = count_digit($fab_number);
//var_dump($fab_number ,$count)."<br>";
++$i;
echo $fab_number . " index of ". $i ."<br>" ;
}
我应该使用GMP库
Edit 1:
function fabNumber($n){
if($n==1 || $n==2) {
return 1;
}
return gmp_strval( fabNumber($n-2) )+ gmp_strval(fabNumber($n-1) );
}
function count_digit($number){
return strlen($number);
}
$i = 1;
$count = 1;
while( $count != 100){
$fab_number =gmp_strval( fabNumber($i));
$count = count_digit($fab_number);
//var_dump($fab_number ,$count)."<br>";
++$i;
echo gmp_strval($fab_number) . " index of ". $i ."<br>" ;
}
@same进展缓慢
答案 0 :(得分:1)
类似的东西:
/\A[- +()0-9]+\z/ # correct and clean
/\A[- +()\d]+\z/ # correct and possibly shortest :)
(PHP&gt; = 5.5.0)
答案 1 :(得分:1)
您可以缓存数字以节省时间,因为在您的版本中,您会在每次迭代时重新计算所有数字
$GLOBALS["fabTab"] = array();
function fabNumber($n){
if($n==1 || $n==2) {
return "1";
}
if (!isset($GLOBALS["fabTab"][$n])) {
$GLOBALS["fabTab"][$n] = bcadd(fabNumber($n-2), fabNumber($n-1));
}
return $GLOBALS["fabTab"][$n];
}
function count_digit($number){
return strlen($number);
}
$start = time();
$i = 1;
$count = 1;
while( $count != 1000) {
$fab_number = fabNumber($i);
$count = count_digit($fab_number);
//var_dump($fab_number ,$count)."<br>";
++$i;
}
echo "$fab_number<br/>index of ". $i ."<br>" ;
echo $count . " digits<br>" ;
echo (time() - $start) . " seconds<br>" ;