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

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

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

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

Q&A

解決済

5回答

2528閲覧

フィボナッチ数列の実現について

lack_un

総合スコア58

C

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

0グッド

0クリップ

投稿2016/04/28 00:06

###前提・実現したいこと
フィボナッチ数列の実現

###発生している問題・エラーメッセージ
コンパイルエラーは起きないが、期待通りの結果を得ることができない。
初心者ですが、回答よろしくお願いします。

###該当のソースコード

C

1#include <stdio.h> 2 3int main(){ 4 int i; 5 int F1,F2,F3; 6 7 F1=1; 8 F2=1; 9 10 printf("%d\n%d\n",F1,F2); 11 F3=F1+F2; 12 13 for(i=1; i<=30; i++){ 14 15 16 printf("%d\n",F3); 17 18 19 20 F3=F2; 21 F2=F1; 22 23 F3=F2+F1; 24 25 } 26 27 return 0; 28 29}

###試したこと
代入の結果がおかしいのか、と考え、F3=F2を逆にしたり、F2=F1を逆にしたりすると、
延々と二倍を繰り返すだけのプログラムや、ずっと2が表示されるプログラムとなり、
フィボナッチ数列にはならなかった。

###補足情報(言語/FW/ツール等のバージョンなど)
C言語を利用しています。

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

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

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

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

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

guest

回答5

0

forループ内ですが、

C

1F3=F2; 2F2=F1; 3F3=F2+F1;

と、F3=F2の後F3=F2+F1しているので、
最初のF3=F2があってもなくても変わらなくなってしまいます。
よって、明らかに意図と反している記述をしてしまっていることが分かります。

いきなりプログラム組んでもただ混乱するだけなので
自分がなにがしたいか図でも何でもメモ書いてからはじめましょう。
今回で言えばこんな感じ?

メモ書き

投稿2016/04/28 00:15

編集2016/04/28 00:32
ozwk

総合スコア13512

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

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

0

参考

雑談

投稿2016/04/28 23:07

katoy

総合スコア22324

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

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

0

Wikipediaのフィボナッチ数で説明されている通りに書き換えてみました。
「以後どの項もその前の2つの項の和となっている」というのを落ち着いて実装すれば難しいことではありません。

C

1#include <stdio.h> 2 3int main(){ 4 int i; 5 int F1,F2,F3; 6 7 F1=0; 8 F2=1; 9 10 printf("%d\n%d\n",F1,F2); 11 12 for(i=3; i<=30; i++){ 13 F3 = F1 + F2; 14 F1 = F2; 15 F2 = F3; 16 printf("%d\n",F3); 17 } 18 19 return 0; 20} 21

投稿2016/04/28 00:37

ttyp03

総合スコア16996

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

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

0

フィボナッチ数列とはどうやって計算するのかをよく考えて、ループの中をこのように組み立ててください。

C

1F1 =2F2 =3F3 =

投稿2016/04/28 00:35

otn

総合スコア84423

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

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

0

ベストアンサー

フィボナッチ数列は最初の二項は0,1と定義されてるようなので最初のF1とF2には、それぞれ
0と1を代入するべきかと。。フィボナッチ数
下記のように変更したらフィボナッチ数が出力されました。

c

1#include <stdio.h> 2 3int main(){ 4 int i; 5 int F1,F2,F3; 6 7 F1=0; 8 F2=1; 9 10 printf("%d\n%d\n",F1,F2); 11 F3=F1+F2; 12 13 for(i=1; i<=30; i++){ 14 15 printf("%d\n",F3); 16 F1 = F2; 17 F2 = F3; 18 F3 = F1 + F2; 19 } 20 21 return 0; 22 23}

実行結果
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269

投稿2016/04/28 00:37

tada_tadaa

総合スコア110

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

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

lack_un

2016/04/28 00:53

代入する順番に着目すれば実行できました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問