次のコードを実行しようとしましたが、結果はセグメンテーションフォルト(コアがダンプされた)です。どうすればエラーを修正できますか?また、私のコードは100のフィボナッチオーリアルを生成するでしょうか?私のコードは以下の通りです。エラーを修正するにはどうすればよいですか?
#include <iostream>
using namespace std;
int fib(int);
int main()
{
int n;
int result[100];
for (int i=0;i<100;i++){
result[i] = fib(i);
} for (int i=0;i<100;i++){
cout << i+ 1 << " : " << result[i] << endl;
}
}
int fib(int n){
int re;
if (n==0||n==1){
re = 1;
} else{
re = fib(n)*fib(n - 1);
}
return re;
}
フィボナッチorial
フィボナッチ数列F(n)は、正の整数で、例えば次のように定義される:
1. F(1) = 1
2. F(2) = 1
3. F(n) = F(n-1) + F(n-2), where n is an integer and n > 2
正の整数のフィボナッチorial製品であります[F(1)、F(2)、...、F(n)]のうち、
re = n * fib(n - 1);
ため
re = fib(n)*fib(n - 1);
か、無限ループになってしまいます。
n Fibonacci-orial of n
1 1
2 1
3 2
4 6
5 30
6 240
7 3120
8 65520
9 2227680
10 122522400
11 10904493600
12 1570247078400
13 365867569267200
14 137932073613734400
15 84138564904377984000
16 83044763560621070208000
17 132622487406311849122176000
18 342696507457909818131702784000
19 1432814097681520949608649339904000
20 9692987370815489224102512784450560000
このような問題を解決する適切なツールは、デバッガを使用することですが、そうする前にStack Overflowで尋ねることはありません。 1つ目の行でコードを検査するときに行ったすべての観察を教えてください。また、[**小さなプログラムをデバッグする方法(Eric Lippertによる)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)**]を読んでみてください。あなたの問題を再現する** [MCVE] **を私たちに任せてください。 (これは、πάνταῥεῖ™によって提供される個人的なコメントです) –
セグメンテーションフォルトは、このような場合にはおそらく、再帰的な 'fib'コールがあまりにも遠すぎることを意味しています....終了条件を再確認してください。深さが大きすぎるため再帰ではなく反復的に書き直します –
そして、このfib(n)はfib(n + 1)または-1を計算しています。いずれにしても、このレベルで+ -1を導入することは明確には役立ちません。おそらく '0'インデックスから' result [] 'に格納したかったでしょうか?むしろ 'result [101]'の0番目の要素を無駄にしたり、 'result [n-1] = fib(n)'を使って、 'fib'の中の' n'を1から上に保ちます。 (コースの終わりの 'if'を固定する)。したがって、あなたの 'fib()'は、理論式=>がバグを見つけやすくなるように直接見えます。やはり 'for'ループは' for(n = 1; n <= 100; ++ n) 'でなければなりません。人間にとどまらず、最後の手段としてのみロジックを機械に曲げてください。 – Ped7g