7/22 课堂知识点总结

斐波那契数列

解法

用数组来一个一个存

为什么不用递归?

递归层数太多,容易爆栈

系统栈:2mb

一般的递归层数:2 * \(10^4\)

//正常解法
for(int i = 3; i <= n; i++)
    a[i] = a[i - 1] + a[i - 2];
时间复杂度:O(n).
//递归解法
int f(int x)
{
    if(x == 1 || x == 2)
        return 1;
    return f(x - 1) + f(x - 2);
}
f(10)
|		|
f(9)	f(8)
|		|		|		|
f(8)	f(7)	f(7)	f(6)
......
会计算多次一个值

pow的误差

来追梦:D1093

pow有浮点数的差,最好直接乘。

P9825 [ICPC2020 Shanghai R] Fibonacci

选取两个数字,假装现在斐波那契数列之中是偶数的有x个,\(x=floor(n/3)\)

如果选取的两个数字,没有顺序关系,\(x*(x-1)\)

有顺序,\(x(x-1)/2\)。解释:每位同学都需要找其他同学握手\(x-1\),总共有x名同学,一共需要\(x(x-1)\)

//重要代码
ll n=x/3;
cout<<n*(x-n)+n*(n-1)/2<<'\n';	

模法公式

\[加法:(a+b)\%c=(a\%c+b\%c)\%c. \]

\[减法:(a-b)\%c=(a\%c-b\%c)\%c. \]

\[乘法:(a*b)\%c=(a\%c*b\%c)\%c. \]

posted @ 2024-07-22 21:05  非气盈门  阅读(11)  评论(0)    收藏  举报