算法思想 | 顺推法 之 斐波那契数列
2021-09-24 253
背景
顺推法是从已知条件出发,逐步推算出要解决问题的方法。
问题
如果1对兔子每月能生1对小兔子,而每对小兔子在它出生后第3个月,又能开始生一对小兔子, 假定在不发生死亡的情况下,由第一个月1对刚出生的兔子开始,1年后能繁殖成多少对兔子。
换算成人话就是,第0月为0,第1月为1,第2月为1,第3月为2。用数字表达则是:0,1,1,2,3,5,8,13,21,......
解释
兔子第一个月为1对,因为未成年,第二个月仍然为1对,第3个月生了1对后为2对,以此类推,则发现符合斐波那契数列的规律:f(n)=f(n-1)+f(n-2),n>=2。
相对f(n)这一月来说,f(n-1)为包含已成年兔子和未成年兔子,f(n-2)是f(n-1)中已成年的兔子,f(n-2)的兔子会生出f(n-2)只新生兔子,成年兔子+未成年兔子+新生兔子的表达式就是f(n)=f(n-1)+f(n-2),n>=2。
代码
func demo(month int) int { f0 := 0 f1 := 1 current := 0 if month < 1 { return f0 } if month == 1 { return f1 } for i := 2; i <= month; i++ { current = f1 + f0 f0 = f1 f1 = current } return current }