50分求助!!!样例过了的

P1255 数楼梯

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 我和你一模一样。。。。。。


|