2016-10-31 14 views
0

なぜこのコードはPython 2でnoneを返しますか?しかし、return文をprint文、つまり関数自体のprint sumで置き換えると、正しい答えが得られます。どうしてこんなことに?私はそれが愚かな質問であることを知っていますが、私はそれを私自身で理解できません。関数はリストの合計の代わりにnoneを返します

import math 
n=int(raw_input().strip()) 
temp = [5] 
arr=[] 
def cal(arr): 
    arr.append(int(math.floor(temp[-1]/2))) 
    temp.append(arr[-1]*3) 
    if len(arr)==n: 
     return sum(arr) 
    cal(arr) 
print cal(arr) 

答えて

2

関数の最後には、読むべき

if len(arr)==n: 
    return sum(arr) 
else:  
    return cal(arr) 

それいけませんか?関数が値を返さずに終了した場合は、戻り値としてNoneが返されます。

3

あなたはそれ以外の機能は、単に自分自身を再帰的に呼び出し、デフォルト(代わりに、計算結果の)によってNoneを返します

return cal(arr) 

する必要があります。

関連する問題