もくじ
フィボナッチ数列
外部サイト
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) // }