c ++分段错误,为什么使用“ long long”却没有得到答案?

问题描述 投票:0回答:1

有人可以解释此代码的错误之处吗?因为当我使用像这样的参数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;
}
c++ fibonacci
1个回答
0
投票

堆栈溢出:每次函数调用自身时,它都会添加到堆栈中,因此此解决方案适用于较小的数字,但是任何太大的数字都会失败。

迭代解决方案:

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
}
© www.soinside.com 2019 - 2024. All rights reserved.