重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

プログラミング初心者です。
フィボナッチ数列を使ったプログラミングのお題が出ましたが、
このフィボナッチ数列(学校で習った記憶がありません)につまづき、
途中まで書いたプログラムが正しいか、どこか抜けいているのか、わからなくなってしまいました。
アドバイス頂けると幸いです。

お題)
整数を入力後、フィボナッチ数とフィボナッチ数の合計を計算して表示せよ。
なお、整数3以下の場合を入力した際は、エラーメッセージ”3以上を入力”を表示する。
*最初2項は、フィボナッチ数は1、1となる。


下記、スードコードで書いてみたドラフトです。フィボナッチ数列の式の中に出てくるnがindexを意味すると解釈し、index=n=0としたのですが、、


Fibonacci

Declare num, Fibonacci number As integer
num=0
fibN=0
index=n=0
sum=0
Prompt num
Get num
If(num<=3)
Display”Error : whole number must be greater or equal to 3.”
Else
For(index=2; index<=num; index++)
fibN=(1.0/sqrt(5))*(pow(1+sqrt((5))/2.0,n)-pow((1-sqrt(5))/2.0,n))
Display fibN
EndFor
Display sum=sum+finN
EndIf

END


アドバイス、およびサンプルのプログラミングも掲載して頂けると幸いです。
なにせ初心者なので、わかりやすく説明頂けると有難いです。
よろしくお願い致します。

A 回答 (3件)

http://eow.alc.co.jp/pseudo+code/

ですから,言語の種類は問わないんですね。

私がさっとコーディングできる,ある言語で書かれたサンプルプログラムを提示しておきます。

class Fibonacci {

  public static void main(String args[]) {
    int num = Integer.parseInt(args[0]);
    if (num <= 2) {
      System.out.println("Error");
      System.exit(1);
    }
    int sum = 0;
    for (int index = 1; index <= num; index++) {
      int fibN = fibo(index);
      System.out.print(fibN + " ");
      sum = sum + fibN;
    }
    System.out.println("\n" + sum);
  }

  public static int fibo(int n) {
    if (n <= 2) {
      return 1;
    }
    else {
      return fibo(n - 2) + fibo(n - 1);
    }
  }
}
    • good
    • 0
この回答へのお礼

サンプルの提示、ありがとうございます!

ちなみにこのお題は、Loopを習った後に課されましたが、
このような複雑なプログラミングの書き方はまだ習っていません(~_~;)

とにかく、勉強になりました。ありがとうざいました。

お礼日時:2011/05/02 09:32

わざわざフィボナッチ数列の一般項の式から算出する必要はないです。


浮動小数点数の演算は誤差が出やすいので,整数加算の方が正しい結果が得られます。

わかる点では,sumの位置が明らかにおかしいです。
fibNを計算した直後に加算しなければいけません。
    • good
    • 0
この回答へのお礼

整数加算とsumの位置ですね。
ご指摘ありがとうございます。
もう少し悩んでみます。

お礼日時:2011/05/02 09:30

まず、フィボナッチ数ですが、まあ個人的な理解では数列の今の値と前の値を足したのが次の値になってる数列で0,1から始まると言うことです。


これだけなら小学生でもわかります、んでもっておそらくプログラムではそこだけ知ってればいいんじゃないですかね。

でも、この場合は最初の値は1,1にしろと言ってるんですかね、問題が不完全なのでわかりませんが、
とりあえずindex1と2は"1"と言うことにしましょう。

次にフィボナッチ数を出したいならさっき言った処理を繰り返せばいいわけです。
for文を使って試行錯誤してください。

しかし、どうにも質問の内容は別な内容をやろうとしているように見えます。
何をしたいのかもう一回完全な形で定義してください。

問題を分解して把握するというのはプログラムの技術とは関係ありません。
しかし、技術系には必要なテクニックです。
    • good
    • 0
この回答へのお礼

フィボナッチ数の説明、ありがとうございました。

>問題を分解して把握するというのはプログラムの技術とは関係ありません
これを聞いてほっとしました。
ですが、現時点では、宿題に出される数学が分からず、
プログラミングを学ぶ以前の問題です。。。

投稿した質問内容について、もう一度テキスト読み返し、
私自身がきちんと理解してから、再度投稿致します。

お礼日時:2011/05/02 09:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!