C++ 段错误,为什么使用 "long long"我没有得到答案?

标签 c++ fibonacci

有人可以解释一下这段代码的错误在哪里吗?因为当我使用这样的参数时 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 t = 0;
    long long j = 1;
    for (int i = 2; i <= n; i++) {
        int k = j;
        j += t;
        t = k;
    }
    return j;
}

关于C++ 段错误,为什么使用 "long long"我没有得到答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59383346/

相关文章:

javascript - 使用先前声明的变量在 fib 序列 javascript 中查找第 n 个值

OCaml 创建斐波那契数列

c++ - 检测系统是否可以运行amd64可执行文件

c++ get() 不设置eof

c++ - 在 dll 接口(interface)中使用 STL 类时消除 C4251 警告的一种方法

c - 返回n==0? 0 : fib2(n, 0, 1) 我找不到那个?

c - 使用函数计算前 20 个斐波那契数及其总和

javascript - 使用 ASP.NET MVC JavaScript 的斐波那契算法

c++ - 如何在 cpp 宏中生成换行符?

c++ - 使用 __declspec(dllexport) 的符号导出问题