アルゴリズムとデータ構造, 数学

PHP フィボナッチ数列

 

フィボナッチ数列


外部サイト
https://www.studyplus.jp/445

 

 

 

コード実装

https://github.com/yuukanehiro/AlgorithmsDataStructure/blob/main/Sequence/FibonacciSequence.php

<?php

$max = 400;
$flag = false;
main($flag, $max);


function main(bool $flag = true, int $max) {
    switch ($flag) {
        // テスト
        case 0:
            testFibonacciSequence();
            break;
        // 実行
        case 1:
            var_dump(fibonacciSequence($max));
            break;
    }
}

/**
 * フィボナッチ数列生成
 *
 * @param int $max
 * @return array $data
 * // 1, 1, 2, 3, 5, 8, 13, 21 ...
 */
function fibonacciSequence(int $max, array $data = [])
{
    $i = 2;
    while (true) {
        $data[0] = 1;
        $data[1] = 1;
        $temp = (int) ($data[$i -2] + $data[$i -1]);
        // $maxを超えていたら処理終了
        if ($temp > $max) {
            break;
        }
        $data[$i] = $temp;
        $i++;
    }
    return $data;
    // return var_dump($data);
}


/**
 * テストコード
 */
function testFibonacciSequence()
{
    for ($i = 0; $i < 100; $i++) {
        $max = rand(100, 1000);
        $result = fibonacciSequence($max);
        $count = count($result);

        $diceNum = rand(1, 6);
        $n = $count - $diceNum;
        $a = $n -2;
        $b = $n -1;

        if ($result[$n] !== (int) ($result[$a] + $result[$b])) {
            var_dump($result);
            echo '異常な値';
            return;
        }
    }
    print("正常");
}


// array(14) {
//     [0]=>
//     int(1)
//     [1]=>
//     int(1)
//     [2]=>
//     int(2)
//     [3]=>
//     int(3)
//     [4]=>
//     int(5)
//     [5]=>
//     int(8)
//     [6]=>
//     int(13)
//     [7]=>
//     int(21)
//     [8]=>
//     int(34)
//     [9]=>
//     int(55)
//     [10]=>
//     int(89)
//     [11]=>
//     int(144)
//     [12]=>
//     int(233)
//     [13]=>
//     int(377)
//   }

 

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)