斐波那契是我见过最神奇的东西

先上个最最朴素的小代码
f[1]=1; f[2]=1; for(int i=3;i<=n;i++) f[i] = f[i-1]+f[i-2];

高精板子

点击查看代码
#include <bits/stdc++.h>
using namespace std;
char sum[1200];
int s=0,m=0,n;
int main()
{
    cin>>n;
    string s1,s2;
    int a[1200],b[1200];
    int he,i;
    s1="0";
    s2="1";
    for(m=2;m<n+1;m++)
    {
        memset(a,0,sizeof a);
        memset(b,0,sizeof b);
        a[0]=s1.length();
        for(i=1;i<=a[0];i++)
        {
            a[i]=s1[a[0]-i]-'0';
        }
        b[0]=s2.length();
        for(i=1;i<=b[0];i++)
        {
            b[i]=s2[b[0]-i]-'0';
        }
        he=(a[0]>b[0]?a[0]:b[0]);
        for(i=1;i<=he;i++)
        {
            a[i]+=b[i];
            a[i+1]+=a[i]/10;
            a[i]%=10;
        }
        he++;
        while((a[he]==0)&&(he>1))
        he--;
            for(i=he,s=0;i>=1;i--,s++)
            {
                sum[s]=a[i]+'0';
            }
        s1=s2;
        s2=sum;
    }
    cout<<s2<<endl;
    return 0;
}

一些神奇的性质

  • 平方与前后项
    从第二项开始 (右移一位,第一项为1,第二项为2...)
    每个偶数项的平方都比前后两项之积多 1
    每个奇数项的平方都比前后两项之积少 1
    比如说
    第二项 1 的平方比它的前一项 1 和它的后一项 2 的积 2 少 1
    第三项 2 的平方比它的前一项 1 和它的后一项 3 的积 3 多 1。
    (注:奇数项和偶数项是指项数的奇偶)

  • 与集合子集
    // f(n+2)项同时也代表了集合 {1,2,3,.....,n} 中所有不包含相邻正整数的子集个数。

  • 奇数项求和
    a1+a3+a5+a7+.....+a(2n-1)=a(2n);

  • 偶数项求和
    a2+a4+a6+a8+.....+a(2n)=a(2n+1)-1;

  • 平方求和
    1-n项的平方和=a(n)*a(n+1);

  • 两倍项关系
    a(2n)/a(n)=a(n-1)+n(n+1);

  • 其他公式
    a(n-1)*a(n+1)-[a(n)]平方=(-1)n次方;

当然不能少了推广
就比如说斐波那契--卢卡斯数列
把f(2)改个数就完了 而且任意几个卢卡斯数列相减就是斐波那契数列了

通项公式及应用
还是用线性递推方程x2=x+1因为其他的看不懂
特征方程传送门
递推数列传送门
类似的,一枚均匀的硬币掷10次,问不连续出现正面的可能情形有多少种?
斐波那契是我见过最神奇的东西
有待补充

上一篇:LeetCode 2002. 两个回文子序列长度的最大乘积 DFS+状态压缩DP


下一篇:adder与latch