php演算法:母牛生小牛問題

qq_35370923發表於2018-12-04

有一母牛,到4歲可生育,每年一頭,所生均是一樣的母牛,到15歲絕育,不再能生,20歲死亡,問n年後有多少頭牛。

遞迴版(論壇裡的

function t($n) {
    static $num = 1;
    for($j=1; $j<=$n; $j++){
        $count++;
        if($j>=4 && $j<15) {$num++;t($n-$j);}
        if($j==20){$num--;}
    }
     return $num;
}

非遞迴版(原創)

function suanfa($n =10){
    if ($n<=3){
        return 1;
    }else {
        $arr = [];
        $arr[] = 4;
        for ($i = 4; $i <= $n; $i++) {
            $count++;
            $newArr = [];
            foreach ($arr as $key => $age) {
                if ($age < 3) {
                    $arr[$key] = $age + 1;
                } elseif ($age < 15) {
                    $arr[$key] = $age + 1;
                    $newArr[] = 0;
                } elseif ($age <19) {
                    $arr[$key] = $age + 1;
                } else {
                    unset($arr[$key]);
                }

            }
            foreach ($newArr as $value){
                $arr[] = 0;
            }
        }
        return count($arr);
    }
}

兩者在時間大於20年後有差異,因為題目對於這個過一年的定義很模糊,不過思路肯定是沒問題。遞迴演算法看似程式碼很少,實際執行的迴圈次數是比非遞迴版的多的,而且程式碼可讀性差。

相關文章