有人可以解释此代码的错误之处吗?因为当我使用像这样的参数a = 425 b = 9631 n = 9876543215时,我得到“退出,细分错误代码139” :(
#include <iostream>
#include <iomanip>
using namespace std;
void ivedimas(long long &n, long long &a, long long &b);
long long fib(long long n, long long a, long long b);
void isvedimas(long long ats);
int main()
{
long long n,a,b;
ivedimas(n,a,b);
isvedimas(fib(n,a,b));
return 0;
}
void ivedimas(long long &n, long long &a, long long &b)
{
cin>>a>>b>>n;
}
long long fib(long long n,long long a, long long b)
{
long long c=b-a;
if (n==2)
return c;
return fib(n-1,b,c);
}
void isvedimas(long long ats)
{
cout<<ats<<endl;
}
堆栈溢出:每次函数调用自身时,它都会添加到堆栈中,因此此解决方案适用于较小的数字,但是任何太大的数字都会失败。
迭代解决方案:
long long fib(long long n, long long a, long long b)
{
if (n == 0) {return 0;}
if (n == 1) {return 1;}
long long i = 0;
long long j = 1;
for (int i = 2; i <= n; i++) {
int k = j;
j += i
i = k
}
return j
}