質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1771閲覧

フィボナッチ数列を作りたい

h_proc

総合スコア68

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/11/23 14:13

引数をnとして、第n項までフィボナッチ数列を計算する関数を作りたいです。以下のようなプログラムを作ったのですがうまくいきません。fibo_rが繰り返し、fibo_aが再帰関数です。それぞれの関数でフィボナッチ数列を作るにはソースコードをどう作り直せばよいのでしょうか。

c

1#include <stdio.h> 2 3int fibo_r(int n); 4int fibo_a(int n); 5//繰り返し 6int fibo_r(int n) 7{ 8 int i = 0; 9 int a[2] = { 1,1 }; 10 for (i = 2; i <= n; i++) 11 { 12 a[i] = a[i - 1] + a[i - 2]; 13 printf("%d\n", a[n]); 14 } 15 16 return 0; 17} 18//再帰 19int fibo_a(int n) 20{ 21 int i = 0; 22 int fibo = 0; 23 if (n <= 2) { 24 return 1; 25 } 26 else { 27 for(i = 2; i <= n; i++) 28 { 29 fibo = fibo_a(i-2)+fibo_a(i-1); 30 return fibo_a(i) = fibo; 31 } 32 } 33 return fibo_a (i); 34} 35int main(void) 36{ 37 printf("Calucurate fibonatch!\n"); 38 39 printf("The answer is %d\n",fibo_r (10)); 40 41 printf("THe answer is %d\n", fibo_a (10)); 42 43 return 0; 44}

(以下具体的に困っていること)
●fibo_aについて、fibo_a(i)=で定義しようとするとエラーが起きてしまいます。
●現ソースコードだと、fibo_aの実行結果は2になってしまいます。
●fibo_rを実行すると4桁くらいの値が表示され、毎回値が異なってしまいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2018/11/23 14:23

すみません、fibo_a(i) = で定義できるとか書いてある参考書があるのでしょうか?
h_proc

2018/11/23 19:20

ありません、、、
guest

回答2

0

ベストアンサー

C

1#include <stdio.h> 2 3//繰り返し 4int fibo_r(int n) { 5 int f2 = 1; // ふたつ前のコタエ 6 int f1 = 1; // ひとつ前のコタエ 7 int fn; // 求めたいコタエ 8 if ( n < 2 ) { 9 fn = 1; 10 } else { 11 int i; 12 for ( i = 2; i <= n; ++i ) { 13 fn = f1 + f2; // コタエ = ひとつ前 + ふたつ前 14 f2 = f1; // ひとつ前 とふたつ前 を 15 f1 = fn; // 順送りにズラす 16 } 17 } 18 return fn; 19} 20 21//再帰 22int fibo_a(int n) { 23 if (n < 2) { 24 return 1; 25 } else { 26 return fibo_a(n-1) + fibo_a(n-2); 27 } 28} 29 30int main(void) { 31 printf("Calucurate fibonatch!\n"); 32 printf("The answer is %d\n", fibo_r(10)); 33 printf("THe answer is %d\n", fibo_a(10)); 34 return 0; 35}

投稿2018/11/23 14:36

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h_proc

2018/11/24 14:12

回答ありがとうございます。
guest

0

●fibo_aについて、fibo_a(i)=で定義しようとするとエラーが起きてしまいます。

関数に代入するという文法はないため、エラーとなっています。
何がしたいか不明なので、再帰に関して復習しましょうとだけ言っておきます。

●現ソースコードだと、fibo_aの実行結果は2になってしまいます。

そもそもエラーなので実行できないかと思うのですが、、、

●fibo_rを実行すると4桁くらいの値が表示され、毎回値が異なってしまいます。

これ正しく表示されたのですか?
aという大きさが2の配列に、大きさ以上の要素にアクセスしているので
SegmentationFaultが起こってる気がするのですが。

投稿2018/11/24 03:04

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

h_proc

2018/11/24 14:10

回答ありがとうございます。再帰について勉強しなおして、再度作ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問