解题思路
这是一个斐波那契数列问题:
- 数列的第一个和第二个数都是
- 从第三个数开始,每个数等于前面两个数之和
- 需要求出第
个数的值
解题方法:
- 如果
,直接返回
- 否则,使用两个变量记录前两个数,迭代计算第
个数
- 注意处理大数问题
代码
#include <iostream>
using namespace std;
int main() {
int k;
cin >> k;
if (k <= 2) {
cout << 1 << endl;
return 0;
}
long long a1 = 1, a2 = 1;
long long result;
for (int i = 3; i <= k; i++) {
result = a1 + a2;
a1 = a2;
a2 = result;
}
cout << result << endl;
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int k = sc.nextInt();
if (k <= 2) {
System.out.println(1);
return;
}
long a1 = 1, a2 = 1;
long result = 0;
for (int i = 3; i <= k; i++) {
result = a1 + a2;
a1 = a2;
a2 = result;
}
System.out.println(result);
sc.close();
}
}
k = int(input())
if k <= 2:
print(1)
else:
a1, a2 = 1, 1
for i in range(3, k + 1):
result = a1 + a2
a1 = a2
a2 = result
print(result)
算法及复杂度
- 算法:动态规划(迭代)
- 时间复杂度:
,其中
是要求的第
个数
- 空间复杂度:
,只使用了常数个变量