dongrq_cs @ 2023-04-03 20:20:42
#include <iostream>
using namespace std;
int step(int n){
if(n == 1){
return 1;
}
if(n == 2){
return 2;
}
return step(n - 1) + step(n - 2);
}
int main(){
int n;
while(cin >> n && n != 0){
cout << step(n) << endl;
}
return 0;
}
by dongrq_cs @ 2023-04-03 20:22:07
TLE5个点
记录详情
by xvl_ @ 2023-04-03 20:46:40
@dongrq_cs
建议使用递推 + 高精。
by wangjiawen @ 2023-04-03 20:47:48
光递归会Tle,所以应该带上记忆。
但是我用记忆WA了后四个点。 所以 应该会用到高精。当然了,如果你有耐心可以打表。
by ayayaaa @ 2023-04-03 20:56:55
兄弟,别用c艹了,这样写过不去的。
首先,对于那剩下的40%的数据用long long都存不下,你必须写一个高精度加法
其次,递归的时间消耗是相当严重的,程序调用函数的时间开销非常大,而且递归不能用inline关键字优化,你至少应该选择for循环
这道题用python写其实只需要5行
n = int(input())
step = [ 1, 2 ]
for x in range(2, n + 1):
step.append(step[x - 1] + step[x - 2])
print(step[n - 1])
by user123456789 @ 2023-05-19 14:44:56
@dongrq_cs 我和你一模一样。。。。。。