• ベストアンサー

pythonでフィボナッチ数カウントを行いたいのですが...

pythonで、入力された二つの数字によるrange(a, b)内からフィボナッチ数の数をカウントするプログラムを書きたいのですが、どのように書けば良いでしょうか?因みに、今のところ a=int(raw_input("Enter the minimum valuer:")) b=int(raw_input("Enter the maximum value:")) def fib(n): if n <= 0: n = 0 elif n == 1: n = 1 else: n = fib(n-1) + fib(n-2) return n for i in range(a, b+1): まで書いてみたのですが、この後どうしたら良いかわからなくなってしまいました。 初歩的な質問なのですが、どうかご回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

流れを読まずにPython的に。 2.5以降でないと動きません。 また、効率は無視しています(が、とんでもないというレベルではないと思います)。 a=int(raw_input("Enter_the_minimum_valuer:")) b=int(raw_input("Enter_the_maximum_value:")) def genfib(): ____yield 0 #_F0 ____yield 1 #_F1 ____yield 1 #_F2 ____n1_=_1 ____n2_=_1 ____while_(True): ________n_=_n1_+_n2 #F(n+2)_=_F(n)_+_F(n+1) ________yield n ________n1,_n2_=_n2,_n for i in genfib(): ____if_a <= i <= b: ________print i ____if i >= b: ________break 実行例: C:\Documents and Settings\All Users>python fib.py Enter the minimum valuer:50 Enter the maximum value:1000 55 89 144 233 377 610 987 大丈夫っぽい?

AE3
質問者

お礼

ご回答ありがとうございます。早速動かしてみようと思います。本当にありがとうございました!

その他の回答 (3)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

#2の者です。 > #define N (1000) これはあまりにもでたらめでありました。 int型の範囲に収まるのはせいぜい40ちょっとですね。

AE3
質問者

お礼

とても丁寧なご回答、ありがとうございます。とても助かりました!

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

ここはC/C++のカテゴリーですので、サンプルをCで書いてみました。 Pythonへの焼き直しを適宜行なってみてください。 #include <stdio.h> #define N (1000) int main(void) { int fib[N] = { 1, 1 }, cnt, a, b, i; for (i = 2; i < N; i++) { fib[i] = fib[i-2] + fib[i-1]; } printf("Enter the minimum value:"), scanf("%d", &a); printf("Enter the maximum value:"), scanf("%d", &b); for (cnt = i = 0; i < N; i++) { if (a <= fib[i] && fib[i] <= b) { cnt++; } } printf("%dから%dまでのフィボナッチ数の数は%d個\n", a, b, cnt); return 0; }

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

>フィボナッチ数の数 単なるフィボナッチ数でなくて、「フィボナッチ数の数」の定義があいまいなような。数が個数なのか、数列なのか、なにか合計値みたいなものなのかが分からないとコードに落とし込めないかと。 たとえば、3から10までですと、どういう結果が得られるかを補足してみては。

AE3
質問者

補足

そうですね。曖昧な質問で、失礼しました。ご指摘ありがとうございます。レンジ中に含まれる、フィボナッチ数の”個数”をprintしたいのです。例えば、 a=2 b=3 の時、フィボナッチ数は2つ a=10 b=100 の時、フィボナッチ数は5つ といった結果が出るようにしたいのですが...。