フィボナッチ値をすばやく見つけるコードを開発しようとしました。しかし、問題は、入力が 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 の場合にこのコードを修正するにはどうすればよいですか?