No.7ベストアンサー
- 回答日時:
def fib(n):
for i in range(n):
if i == 0:
return 0
elif i == 1:
return 1
else:
return fib(n-1) + fib(n-2)
fib(10)
ですね。
先の回答でも書きましたが
> for i in range(n):
だとforの最初のiは常に0です。
そしてif i==0:が選ばれ、return 0 で返ってしまいます。
for文の中でreturnしてしまうとループしないのです。
for文でreturnするとループしないのですね、知りませんでした。勉強になりました、ありがとうございます。他の質問も色々あるので、またよろしくお願いいたします。
No.8
- 回答日時:
>単純にこの2つの違いが分からないです。
単純に-行ー行追って行けばまるで動きが違うことは
直ぐに分かりますよ。
forを関数の内側に入れただけという
形式的な考え方なんでしょうけど、
それは再帰関数には通用しない。
実行を一つ一つ追って見るという
ことが出来ないと、プロブラムは
上達しません。
No.6
- 回答日時:
インデントがちゃんとしていれば
invalid syntax(文法違反)
とでるだけのはず。
4行目→elifの論理式の==の左がない。
のが原因。
しかし、これを直しても動きませんよ。
この再帰とforが混じった謎のアルゴリズムは何処から
捻り出したんですか?
インデントはコピペでおかしくなってしまったようです。あと簡単なタイポも失礼しました。
他の方にも質問させて頂きましたが、
def fib(n):
if n == 0:return 0
elif n == 1:return 1
else:return fib(n-1)+fib(n-2)
for n in range(11):
print(fib(n))
は正常にWorkするのに、
def fib(n):
for i in range(n):
if i == 0: return 0
elif i == 1: return 1
else: return fib(n-1) + fib(n-2)
fib(10)
この出力が0になるのはなぜでしょうか?
単純にこの2つの違いが分からないです。
No.5
- 回答日時:
ANo.4です。
forがいらんかったわ。def fib(n):
if n == 1:
return 0
elif n== 2:
return 1
else:
return fib(n-1)+fib(n-2)
print(fib(10))
表示の都合でインデントは全角空白にしているので半角空白に置き換えて下さい。
あと質問するときは『謎のメッセージ』じゃなくてメッセージそのものを書こうね。
質問文通りだとインデントがおかしいので文法違反になるし、適当に修正してもいろいろと間違っているので『謎のメッセージ』が何を指しているのか推測するだけで大変なので。
> for n in range(x):
この書き方だとPythonではnは0から始まります。それで文法レベルの間違いを適当に修正したらn=0から fib(n-1)+fib(n-2) は fib(-1)+fib(-2) なって、range(-1)は空リストなのでfib(-1)は値を返さなくてエラーになります。
forの中で簡単にreturnしたらダメですよ。指定した数値以下の数列を計算してリストで返すなら例えば次のようにします。
def fib(m):
ret = []
for n in range(m):
if n==0:
ret.append(0)
elif n==1:
ret.append(1)
else:
ret.append(ret[n-1]+ret[n-2])
return ret
print(fib(10))
表示の都合でインデントは全角空白にしているので半角空白に置き換えて下さい。
コードをコピペしたらインデントがおかしくなってしまったようです。
あの後私も空のリストつくってそこに順次足していくというコードでWorkするものが書けました。
追加で質問なのですが、下記のコードの問題点もご指摘頂けないでしょうか?
def fib(n):
for i in range(n):
if i == 0: return 0
elif i == 1: return 1
else: return fib(n-1) + fib(n-2)
fib(10)
出力が0となってしまうのですが、その理由が分かりません。
No.4
- 回答日時:
本当に質問通りに書いたの?
Pythonって改行とインデントが文法に含まれるので、こんな書き方だと文法違反が多数出ると思うけど。
def fib(x):
for n in range(x):
if n == 1:
return 0
elif n == 2:
return 1
else:
return fib(n-1)+fib(n-2)
print(fib(10))
表示の都合でインデントは全角空白にしているので半角空白に置き換えて下さい。
No.2
- 回答日時:
No.1です。
Pythonもそれほどやってないので不明な点はありますが、print文の内容として適切ではない(何故繰り返しが行われているの?)からかなって思います。
なので普通にfor文を使う手段しかわかりません。
print(fib(10))
の代わりに
for x in range(1,11):print(fib(x)) # 10までなら指定は11。0はダメなので最初は1。
上のコードで正しくWorkしました。
他の方にも回答させて頂きましたが、range(10)にすると最初のn==0の時にelse以下を実行してエラーが出てしまうのですね。
追加質問についてですが、
[fib(n) for n in range(1,11)]
だと数列が出力されるのですが、この仕組みが分からないです。
forの最後に:もつけなくて良いのも初めてみました。
リストではなく、書きの通りだとやはりWorkしません。
fib(n) for n in range(1,11)
リスト型の機能の一つなのでしょうか。
No.1
- 回答日時:
def fib(n):
if n == 1:return 0
elif n == 2:return 1
else:return fib(n-1)+fib(n-2)
print(fib(10)) #34
こうではないの?
https://qiita.com/dovedove/items/3456c4f317a5c68 …
for文は関数の中に書くものではないと思うし、受け取る際の変数名とその後に使用している変数名が違うし。
早速ありがとうございます。
添付リンクを参照して、他のやり方で下記直せないかと思って上のコードを試しています。
n番目までの数列を示す様なコードをfor文で書きたいです。関数の中にfor文使う事はよくありますよね?
追加で質問なんですが、リンクだと、リスト型として出力してますが、リスト型にしないで書くとエラーが出るのは何故でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 【Python初学者】以下コードについて教えていただきたいです 4 2023/04/19 13:01
- その他(プログラミング・Web制作) listへのappendが出来ない件 1 2022/12/06 21:44
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- 統計学 機械学習(最適化問題)のプログラムで、以下の2つの関数がどんな関数なのかご存知の方はおりますか? d 5 2022/06/23 00:35
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- 工学 Pythonの3Dグラフ表示に関する質問です。 1 2022/12/06 15:03
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語 3 2022/11/09 13:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パイソンのクラスについて
-
Pythonでターミナルに文字を出...
-
perlでurlが正しいか判定したい
-
SHA1ハッシュの生成結果が異な...
-
関数「exists」と「defined」の...
-
N88-日本語 BASIC ASCII ファイル
-
pythonで演算子を変数に代入す...
-
【至急!!!】python言語で本を見...
-
c言語 16進数の2進数への変換
-
DBIがうんともすんとも言いませ...
-
フォームの内容を確認画面で表示
-
Perlの例文でif($a==1&&$b==5&&...
-
16進の10進変換について
-
swift 文字コードから文字に変...
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
formで特定のinputを送信しない...
-
メモリをアドレスを直接指定し...
-
パイソンプログラミング
-
「*:*」って何を意味するのでし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Pythonでターミナルに文字を出...
-
16進の10進変換について
-
int(input("○○"))の使い方
-
シェルスクリプトで、空白(ス...
-
パイソンのクラスについて
-
【至急!!!】python言語で本を見...
-
awkの正規表現での最左最短マッ...
-
pythonの*
-
I2C接続のLCDディスプレイを使う
-
数値かどうかの判定方法
-
awk の int()に関数について
-
pythonで改行を含めてfindする方法
-
関数「exists」と「defined」の...
-
pythonで演算子を変数に代入す...
-
PythonでUTF8の文字列をリスト...
-
c言語 16進数の2進数への変換
-
pythonを使ったプログラミング...
-
画面上再読み込みをさせたいの...
-
変数の中は文字列か数値か調べ...
-
UWSCのSELECT文の記述方法
おすすめ情報