意味悲鳴

PythonとかUnityとか.技術ブログでしたが,研究ブログにシフトしました.

Pythonで再帰を書いていた時にハマった話

こんにちは.Python再帰書いたらちょっとハマったのでメモがてら書いておきます.

def hoge(a, num):
  if num == 0:
    return 
  else:
    num -= 1
    return [a] + hoge(a, num) 

なんかこんな感じで,aと言う数字をnum個だけ格納するリストを作ると仮定します(あくまで仮の話).

で,このコードはそのまま動かすとエラーになります.

TypeError: can only concatenate list (not "NoneType") to list

理由としては,num == 0の場合に返すreturn.これ,返ってくるのはNoneなので,それをリストと足そうとしているからエラーが返ってくる.

解決策としてはとっても簡単.returnの部分を以下のように変更するだけ.

  return []

空のリストを返せば,足しても何の問題もない.けど,解決策として適切か考えると微妙な気もする.再帰でリストを作る機会がどれだけあるのか?と問われるとなかなか浮かばないし.

そんな感じです.