fib

https://www.jianshu.com/p/f0513d18742a

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, …

Matrix2By2 MatrixPower(unsigned int n)
{
    assert(n > 0);
 
    Matrix2By2 matrix;
    if(n == 1)
    {
        matrix = Matrix2By2(1, 1, 1, 0);
    }
    else if(n % 2 == 0)
    {
        matrix = MatrixPower(n / 2);
        matrix = MatrixMultiply(matrix, matrix);
    }
    else if(n % 2 == 1)
    {
        matrix = MatrixPower((n - 1) / 2);
        matrix = MatrixMultiply(matrix, matrix);
        matrix = MatrixMultiply(matrix, Matrix2By2(1, 1, 1, 0));
    }
 
    return matrix;
}

斐波那契数列的变形有很多。

比如剑指Offer后面的拓展:青蛙跳台阶问题和矩形覆盖问题,希望当你分析一些问题的时候,脑海里有斐波那契数列的数学模型。

(1)拓展题目1:青蛙跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

将跳法总数记为f(n)
f(1)=1
f(2)=2
当n>2时,第一次跳1级的话,还有f(n-1)种跳法;
当n>2时,第一次跳2级的话,还有f(n-2)种跳法
f(n)=f(n-1)+f(n-2)的递推式能够悟出来吧。

(2) 拓展题目2:矩形覆盖问题
用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?

当n = 1时,有一种方法。
当n = 2时,有两种方法。
当n >= 3时,和斐波那契数列类似。
第一步竖着放,有f(n-1)种方法;第一步横着放,有f(n-2)种方法。所以f(n)=f(n-1)+f(n-2)。

除了斐波那契数列简单直观的数学模型,我们也应该加强一下科学归纳法的思想。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
12-28 178

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值