试图开发一个快速找到斐波那契值的代码。但问题是当输入为 1000000 时,我得到 SIGSEGV 错误。另外,从这里的其他问题中,我知道这可能是因为堆栈内存在运行时超出限制。我想这就是这里的情况。
#include<stdio.h>
unsigned long long int a[1000001] = {0};
unsigned long long int fib(int n)
{
unsigned long long int y;
if(n==1 || n==0)
return n;
if (a[n] != 0)
return a[n];
else
{
y=fib(n-1)+fib(n-2);
a[n] = y;
}
return y;
}
main()
{
int N;
unsigned long long int ans;
a[0] = 1;
a[1] = 1;
scanf(" %d",&N);
ans = fib(N+1);
printf("%llu",ans);
}
如何为输入值 1000000 修复此代码?