本來以為第一次就寫好了,結果發現在 function 外面的 $cache 需要在 function 裡面加上 global $cache 才會存取,其他程式碼都不用改。(以下是之後 Google 改用 static 的版本)
<?php
function fib(int $n): int {
static $cache = [];
if ($n == 1 or $n == 2 ) {
return 1;
}
if (isset($cache[$n])) {
return $cache[$n];
} else {
$cache[$n] = $result = fib( $n - 1 ) + fib( $n - 2 );
return $result;
}
}
printf("fib 1: %d\n", fib(1));
printf("fib 2: %d\n", fib(2));
printf("fib 3: %d\n", fib(3));
printf("fib 4: %d\n", fib(4));
printf("fib 5: %d\n", fib(5));
printf("fib 10: %d\n", fib(10));
printf("fib 20: %d\n", fib(20));
printf("fib 30: %d\n", fib(30));
printf("fib 40: %d\n", fib(40));
printf("fib 50: %d\n", fib(50));