斐波那契数列-兔子算法

2020-08-27  本文已影响0人  淡淡de盐

兔子算法

兔子问题,一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔都不死,那么一年以后可以繁殖多少对兔子?

//兔子(斐波那契)
function calculateRabbitNum($month)
{
    if (0 == $month || 1 == $month) {
        return 1;
    }

    return calculateRabbitNum($month - 1) + calculateRabbitNum($month - 2);
}

var_dump(calculateRabbitNum(12));//144

function getResult($month){
    $one = 1; //第一个月兔子的对数
    $two = 1; //第二个月兔子的对数
    $sum = 0; //第$month个月兔子的对数
    if($month < 3){
        return ;
    }
    for($i = 2;$i < $month; $i++){
        $sum = $one + $two;
        $one = $two;
        $two = $sum;
    }
    echo $month.'个月后共有'.$sum.'对兔子';
}

getResult(12);

每个人的思考方式不同,最后还以图解结束这兔子题吧!(虽然这个题多人都在问,不过用兔子比喻多少有点……)

解题过程就不说了和斐波那契一样,说一下用递归实现
,整体过程就是用
(上上个月兔子对数)+(上个月兔子对数) = 这个月兔子对数
ps:
递去就是满足条件循环,不满足条件停止

return 1;

归来就是,很多个 1 相加,得出最后的对数

return calculateRabbitNum($month - 1) + calculateRabbitNum($month - 2);

也可以用下图理解:

共8只兔子 共13只兔子
上一篇下一篇

猜你喜欢

热点阅读