#include <stdio.h>
// 计算第 n 项的斐波那契数
int fibonacci_at(int n)
{
/*
* f1 : 比喻为指针,一开始指向第一项数
* f2 : 比喻为指针,一开始指向第二项数
* result : 由 f1 和 f2 求和而来,即为第三项的数
*
* 如在这样的斐波那契数列中:1, 1, 2, 3, 5, 8 ...
* f1 和 f2 的指向为: f1 f2
*/
int f1 = 1, f2 = 1, result = f1 + f2;
if (n < 3)
{
return 1;
}
/*
* 在这样的斐波那契数列中,只在计算第4项数才开始向右移动 f1 和 f2
*
* 计算第3项:1, 1, 2, 3, 5, 8 ...
* f1 f2
* 计算第4项:1, 1, 2, 3, 5, 8 ...
* f1 f2
* 计算第5项:1, 1, 2, 3, 5, 8 ...
* f1 f2
*/
while (n-- > 3)
{
f1 = f2;
f2 = result;
result = f1 + f2;
}
return result;
}
int main() {
int n = 0;
scanf("%d", &n);
printf("%d", fibonacci_at(n));
return 0;
} #include <iostream>
#include <cassert>
int fibonacci_sequence(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
else
{
return fibonacci_sequence(n - 1) + fibonacci_sequence(n - 2);
}
}
int main()
{
int n;
// std::cout << "请输入一个正整数:";
std::cin >> n;
// std::cout << "您输入的正整数是:" << n << "\n";
assert(n >= 1 && n <= 46);
std::cout << fibonacci_sequence(n) << "\n";
return 0;
} x=int(input()) a=1 b=1 for i in range(1,x-1): if i%2==0:b+=a else:a+=b print(max(a,b))
#include <stdio.h>
int main() {
int a, b,c=1,v1=1,v2=0;
scanf("%d",&a);
for(b=1;b<a;b++){
c=v1+v2;
v2=v1;
v1=c;
}
printf("%d",c);
} #include <iostream>
using namespace std;
using ll = long long;
// 2*2方阵
struct MatrixSq2{
ll m[2][2];
MatrixSq2(){m[0][0]=m[0][1]=m[1][0]=m[1][1]=0;}
};
// 2*2矩阵乘法
MatrixSq2 mul(MatrixSq2 a,MatrixSq2 b){
MatrixSq2 res;
for(int i=0;i<2;++i){
for(int j=0;j<2;++j){
for(int k=0;k<2;++k){
res.m[i][j]+=a.m[i][k]*b.m[k][j];
}
}
}
return res;
}
// 2*2矩阵快速幂
MatrixSq2 qpow(MatrixSq2 base,ll power){
MatrixSq2 res;
res.m[0][0]=res.m[1][1]=1;
while(power){
if(power&1) res=mul(res,base);
base=mul(base,base);
power>>=1;
}
return res;
}
// 矩阵+快速幂求fib(n)
ll fib(ll n){
if(n==1 || n==2) return 1;
MatrixSq2 base;
base.m[0][0]=1;base.m[0][1]=1;
base.m[1][0]=1;base.m[1][1]=0;
MatrixSq2 mat=qpow(base,n-2);
return mat.m[0][0]+mat.m[0][1];
}
int main(){
ll n;
cin>>n;
cout<<fib(n)<<"\n";
return 0;
} 矩阵+快速幂算法求解斐波那契数列