すべてのカテゴリ » インターネット・パソコン » 技術・プログラミング

質問

終了

フィボナッチ数列を出力するプログラムを作ってください。
第一引数に出力する数を受け取って、その分だけ数列を出力します。

fibo 3 と入力したら、0, 1, 1,と出力して、
fibo 10 と入力したら、0, 1, 1, 2, 3, 5, 8, 13, 21, 34,と出力します。

言語は何でも良いです。
できるだけ分かりやすくお願いします。

  • 質問者:匿名希望
  • 質問日時:2009-09-08 16:23:43
  • 0

Javaで作ってみました。

import java.math.BigInteger;

public class Fibonacci {
public static void main(String[] args) {
int maxCnt = getMaxCount(args);

BigInteger[] fiboNumArray = {new BigInteger("0"), new BigInteger("1"), null};
for (int i = 0; i < maxCnt; i++) {
if (i < 2) {
System.out.print(fiboNumArray[i]);
System.out.print(", ");
} else {
fiboNumArray[2] = fiboNumArray[0].add(fiboNumArray[1]);
fiboNumArray[0] = fiboNumArray[1];
fiboNumArray[1] = fiboNumArray[2];
System.out.print(fiboNumArray[2]);
System.out.print(", ");
}
}
System.out.println();
}

private static int getMaxCount(String[] args) {
int maxCnt = 0;
if (args.length > 0) {
try {
maxCnt = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
}
}
return maxCnt;
}
}

  • 回答者:ノイノイ (質問から7時間後)
  • 1
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

要件をきちんと満たしたプログラムでした。
さらに大きな数字を入力してもきちんと動作していましたので、ベストに選ばさせて頂きました。

並び替え:

Option Explicit

Private Sub Command1_Click()

fibo Val(InputBox(""))

End Sub

Private Sub fibo(n As Long)

Dim i As Long
Dim f As Long, f1 As Long, f2 As Long
Dim S As String

If n = 1 Then
S = "0,"

ElseIf n = 2 Then
S = "0,1,"

ElseIf n < 1 Then
S = "error"

Else
n = n - 3
f1 = 0
f2 = 1
S = S & f1 & "," & f2 & ","
For i = 0 To n
f = f1 + f2
f1 = f2
f2 = f
S = S & f & ","
Next i

End If

MsgBox S

End Sub


vb6で作成しました
あんまり考えてないかもw

===補足===
例題の10が出力できたのでよしと思ったのですが残念です。

変数をVariantにすればオーバーフローしませんけど
変数の取り扱いが雑なvbではエラーの元なんで使わないんですよね。

使用言語の差が出ちゃいましたね
無念。。。

  • 回答者:名無し (質問から48分後)
  • 0
この回答の満足度
  
参考になり、満足しました。回答ありがとうございました。
お礼コメント

最初の入力を500とかにするとエラーになってしまいました。
大きい数字で上手く動かなかったので、マイナス1点にさせて頂きました。

小飼弾さんの記事にありました。
http://blog.livedoor.jp/dankogai/archives/50958771.html

  • 回答者:とくめいきぼう (質問から15分後)
  • 1
この回答の満足度
  
回答ありがとうございました。
お礼コメント

紹介して頂いたURLのプログラムは、
“第一引数に出力する数を受け取って、その分だけ数列を出力する”
という条件を満たしていないので、低評価とさせて頂きます。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る