2

この再帰コードでは、関数が正しく True を返すようにしていますが、その後 1 つの追加ステップに進み、戻り値を "None" に変更します。戻り値を正しく理解していないと思います。なぜこれが起こっているのか誰か教えてもらえますか?前もって感謝します。

--

def nestedListContains(NL, target):
   for i in range(0, len(NL)):
      if type(NL[i]) == int:
         if NL[i] == target:
            return True
         elif i == (len(NL) - 1):
            return False
      elif type(NL[i]) != int:
         nestedListContains(NL[i], target)

nestedListContains([[9, 4, 5], [3, 8]], 3)   #Test Case#
4

3 に答える 3

0

再帰を使用するには、再帰的な結果を返す必要があります。

def nestedListContains(NL, target):
   for i in range(0, len(NL)):
      if type(NL[i]) == int:
         if NL[i] == target:
            return True
         elif i == (len(NL) - 1):
            return False
      elif type(NL[i]) != int:
         #you missed the return for the recursive case
         ret = nestedListContains(NL[i], target)
         if(type(ret) == bool): #ensure we have an actual result and not a fall through
             return ret
于 2013-11-01T14:00:08.050 に答える
-1

以前の答えを少し詳しく説明するとNone、特定の値を返さずに関数の最後に到達したときに得られます。

  def func():
     ... do something ...

次と同等です。

  def func():
     ... do something ...
     return None

returnループの後にステートメントがないため、空の NL を渡した場合でも、これは発生します。

(また、isinstance(value, int)何かのタイプをチェックするための好ましい方法です)

于 2013-11-01T14:03:27.590 に答える