2016-06-16 11 views
0

入力配列aを再帰的に実行し、の値を計算する関数を実装したい場合は、i(len(a)),j = i -1にあり、最後に出力としてリストを返します。したがって、配列[1, 2, 3, 4, 5, 6]が与えられた場合、結果は[1, 1, 1, 1, 1]になります。Pythonで再帰的に値を正しく返すには?

私のコードは次の通りである:

import numpy as np 
def recur_diff(array, result_array=None): 
    l = len(array) 
    if l > 1: 
     diff = array[-1] - array[-2] 
     if result_array is None: 
      result_array = np.array([diff]) 

     else: 
      result_array = np.append(result_array, diff) 
     recur_diff(array[:-1], result_array) 
    else: 
     return result_array 

返された結果がNoneですが。そしてもし私がprint result_arrayなら、出力は私が期待しているものです。あなたは何か考えていますか?前もって感謝します!

答えて

1

recur_diffへの再帰呼び出しにreturnを追加すると、recur_diff(array[:-1], result_array)になります。そうでなければ結果は上位レベルだけヒントとして

if l > 1: 
    # ... 
    return recur_diff(array[:-1], result_array) 
else: 
    return result_array 

に戻されることはありません。代わりにresult_arrayを操作し、上の結果と/仕事をあなたは次のレベルを計算することができ、次のレベルにそれを渡すとマージの現在のレベル。多くの場合、これはよりクリーンなコードです。 (あなたの例では、返された値が Noneの代わりに配列であることがわかっています)

関連する問題