簡體   English   中英

c ++分段錯誤,為什么使用“long long”我沒有得到答案?

[英]c++ segmentation fault, why using "long long" I dont get an answer?

有人可以解釋這段代碼中的錯誤在哪里嗎? 因為當我使用這樣的參數 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;
}

斐波那契的這種遞歸版本不適用於大數。 每次它被稱為遞歸堆棧增加,直到結束從不減少。 因此,您只需在返回結果之前終止進程內存。

您可以嘗試迭代解決方案。

謝謝,這是解決方案:)) 序列中的每 6 個數字都是相同的 :) 例如 10,8,-2,-10,-8,2|10,8,-2,-10,-8, 2...

long long fib(long long n,long long a, long long b)
{ long long c=a;
if (n==0) return a;
if (n%6==1) return b;
  for (int i=1;i<n%6;i++)
  {
    c=b-a;
    a=b;
    b=c;
  }
  return c;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM