の代わりにNが返ってきた理由を理解できないようです。R私は返信陳述書に行く前に手紙が何であるかをテストしました。出力のイメージでわかるように、それはRでなければなりません。それでも、それは図のようにNを返し続けます。なぜそれがそれを行うのか分かりません...私はプロセスを手でトレースしようとしましたが、私はまだRで終わります。私の考えを見て理解するためのコード。私はまた、出力の写真を一番下に含めました。再帰バイナリ検索プログラムで何が問題になっていますか?
入力:「A」、「B」、「C」、D、E、F、G、H、I、J、K 「L」「M」「N」「O」「P」「Q」「R」「S」「T」「U」「V」「W」 'X'、 'Y'、 'Z']
def binSearch(lst, what):
position = ""
original_lst = lst[:]
if (position == what): # Doesn't do anything since no recursive is made when position is equal to R.
return original_lst.index("%s" %position)
else:
midpoint = (len(lst))//2
position = lst[midpoint]
print("Looking at", position)
if position > what:
lst = lst[:midpoint]
binSearch(lst, what)
elif position < what:
lst = lst[midpoint:]
binSearch(lst, what)
elif position == what: # Removable. Just Testing and seeing what position it results as.
print("Position it ends up in:", position) # when I replace this later, I probably should use a binSearch(). I think?
else:
return -1 # this is for if the letter not found.
return position # Why does it return N... instead of R? This originally was suppose to find the index of the letter on the list. I adjusted it to see what letter the program was searching for instead. It still results in the same problem if I change it to look for the index of letter instead as it looks for **N** instead of **R**
# just to clarify, I was aiming to use return original_lst.index("%s" %position) to find the index of the letter. I just changed it to see what letter its returning instead.
lst = []
while True:
val = input()
if val == "exit":
break
lst.append(val)
print(lst)
lst.sort()
print(lst)
what = input("Enter element to search for:")
print(what)
where = binSearch(lst, what)
if where != -1:
print("Found at position", where)
else:
print("Not found")
編集:このプログラムは、もともと文字の値を見つけることとしました。ポジションは手紙であると考えられ、私はちょうどreturn.indexそれを最後にします。しかし、わかりやすく分かりやすくするために、私は最後にreturnステートメントを変更しました。それはまだの代わりにと同じ結果で終わります。。
いくつかの考え方:①実際にポジションを保持していないときは、どのように変数 'position'に名前をつけますか?代わりに要素を保持します。 ②返り値を使わないときに 'binSearch()'を呼び出すのは良いのですか? (あなたは再帰的な呼び出しでこれを行います。)③要素のバイナリを検索しているように見えますが、見つけたらすぐに '.index()'を使ってその位置を探します。 '.index()'は要素の線形検索を行います。だからあなたのすばらしいバイナリ検索は役に立たない。 – Alfe
ハハ。申し訳ありません。 positionは.index()を使用してリスト内の位置を見つけることが想定されていました。しかし、わかりやすくするために、私はそれを変更しました。私は** R **の代わりに** N **を与えるので、要素の位置のインデックスを検索するように変更すれば、私はまだ同じ問題に遭遇しています。 – HiDanny
返される関数は何ですか?それは要素そのものか、リストのインデックスですか? –