1

3x + 1 problemPHPスクリプトをオンラインで実行し、すべての数値を評価することで、を検証しようとしています。

無限ループを実行していますが、値が約35,000に達すると、サーバーはループを停止します。

HTTP接続がリセットされ、サーバーがリクエストを処理しなくなったときに終了が発生したと思います。

可能な限り実行し、必要に応じてサーバーのリソースを使い果たしたいと思います。どうすればいいのですか?cronjobs?

これがスクリプトです。「End」は印刷されません。

class Collatz_Verify
{
    public function Collatz_Verify()
    {
        // open output file
        $file = 'verified_nums.txt';
        $outFile = fopen($this->NUMBERS_FILENAME, 'a');
    }

    public function verify()
    {
        $num = 0;
        while(1)
        {
            $num += 1;
            # call collatz!!
            if($this->collatz($num) == 1)
                   fwrite($this->outFile, $num);
        }
        print "ah, crap! End!";
    }

    public function collatz($num)
    {
        if ($num == 1)
            return 1;
        if (($num % 2) == 0)
            return $this->collatz($num/2);
        else
            return $this->collatz((3*$num) + 1);
    }
}


// Fire away!
$ver = new Collatz_Verify();
$ver->verify();

?>
4

5 に答える 5

2

コマンドラインから実行することもできますが、リソースが不足しているため、最終的には停止します。

コマンドラインから実行すると、私の投稿の直前に記載されているini_setを実行する必要がなくなります。(http://www.php.net/manual/en/info.configuration.php#ini.max-execution-timeを参照してください)

于 2013-02-07T15:24:46.420 に答える
2

あなたはループに入っているので、最後は決して印刷されwhile(1)ません。したがって、その後のステートメントに到達することはありません。php.ini変数の設定が原因で、スクリプトが終了している可能性がありますmax_execution_time

編集:関数set_time_limit() http://de2.php.net/manual/en/function.set-time-limit.phpを使用して、スクリプトの時間を増やすことができるようにしてください。

于 2013-02-07T15:25:35.607 に答える
1

PHPがループの実行を停止する理由は2つ考えられます。

1つ目は、実行時間の制限に達していることです。2つ目は、(の再帰のために)最大ネストレベルに到達することcollatz()です。

最大ネストレベルは100です(これを変更する方法はわかりません)。デフォルトの実行時間制限は30秒です。他の答えが示すように、あなたはそれを増やすことができます。

スクリプトが停止する理由を確認するには、表示エラーをオンに設定するか、Webサーバーのエラーログを確認する必要があります。また、出力ファイルを確認して、最後に成功した番号から始めることもできます。したがって、出力ファイルの最後の番号が34998の場合は、行$num = 0;をに変更し$num = 34998;ます。

于 2013-02-07T15:48:31.690 に答える
1

phpにはmax_execution_time制限があります。もっと長く実行したい場合は、ini_set('max_execution_time'、100);を試すことができます。// 100を、実行できるようにする秒数に置き換えます

于 2013-02-07T15:23:41.583 に答える
0

このPHP.iniファイルでは、スクリプトが実行/メモリで使用できる時間に制限があります。

詳細については、 http://php.net/manual/en/info.configuration.phpを参照してください。

于 2013-02-07T15:25:39.457 に答える