**本文已搬运至作者个人博客: https://www.ksroido.art/
本博客主要发布CTF及MIDI音乐制作相关博文
背景
笔者参加的算法课的课后作业
阅读本文前置知识
- 看得懂算法术语即可
正文
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int fib(unsigned int n);
int main() {
int n;
cin >> n;
cout << fib(n);
return 0;
}
int fib(unsigned int n){
int firstNumber=1,secondNumber=1,resultNumber=2; //resultNumber必须要初始化
if(n<=0) return -1; //合法性检查
if(n<=2) return firstNumber; //简化程序流程
else{ //主体部分
for (int i = 1; i <=n-2 ; ++i) {
firstNumber=resultNumber+secondNumber; //递推下一项
swap(firstNumber,resultNumber); //滚动数组
swap(firstNumber,secondNumber);
}
return resultNumber;
}
}
//方法二
int calcu(unsigned int a){
if(a<=2) return 1;
if (cache[a])
return cache[a];
else
return cache[a]=calcu(a-1)+calcu(a-2);
}