这为什么MLE?????

P3938 斐波那契

@[zues__ccs](/space/show?uid=131959) ```cpp #include<iostream> #include<cstdio> #define LL long long using namespace std; LL m; LL fib[70]; LL read() { char c=getchar(); LL f=1,x=0; while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();} return x*f; } LL find(LL a,LL b) { LL p; if(a<b) swap(a,b); if(a==b) return a; p=lower_bound(fib+1,fib+63,a)-fib; return find(b,a-fib[p-1]);//这里return } int main() { LL i,x,y; LL ans; m=read(); fib[0]=1;fib[1]=1; for(i=2;i<=65;i++) fib[i]=fib[i-1]+fib[i-2]; for(i=1;i<=m;i++) { x=read(); y=read(); ans=find(x,y); printf("%lld\n",ans); } return 0; } ```
by 白菜道士 @ 2019-08-21 09:37:32


@[轩少](/space/show?uid=174687) 谢谢谢谢谢谢!!
by tofay @ 2019-08-21 10:19:52


@[轩少](/space/show?uid=174687) 但是我还是不明白为什么加一个return就好了? 感觉很神奇;。
by tofay @ 2019-08-21 10:21:33


@[tofay](/user/131959) return是结束指令,可以省调用递归次数。并且即使你程序结束了,也没有答案。因为最开始那层调用没有返回值。我曾经看过我同学的代码也是这个问题,他报了T&MLE,我帮他改了一下就A了。
by HatsuneMiku39 @ 2022-09-10 10:52:14


|