@[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