2017-06-18 1 views
0
def nat_fn1(k): 
    if k == 0: 
    return 1 
    elif k%2 == 0: 
    return 2 
    else: 
    return nat_fn1 (k-1) 

私は最初にnat_fn1(5)を試しました。私は2という答えを得ました。これは期待されていました。それから、同じコードを返信せずに試してみました。値はNoneでした。これも期待されていました。だから、同じ概念を適用し、私はこのコードを試してみました:return文とreturn文は同じですか?

def process_strings(s,t): 
    if s == "": 
     if not(t== ""): 
     print(t) 
    else: 
     print("{0}{1}".format(s[0],t[0])) 
     process_strings(s[1:], t[1:]) 

私は再帰でreturnがないとしてNoneを期待していない、process_strings("cat","dog")を試してみました。しかし、私はまだ答えがあります:

cd 
ao 
tg 

私はそれがどのように得られたのか理解しています。しかし、リターンステートメントはありません。なぜこれは機能していますか?

+1

** **返品なし返品なし –

+0

あなたの値を印刷するだけで、返品されません。 –

+0

私はかなり理解していません。申し訳ありませんが、私はPythonの初心者です。私は帰りに再帰的に何をしているのですか?再発する前に再発するか停止するか? – Compsci

答えて

1

あなたが得るのは戻り値ではなく、printの出力です。
対話形式のプロンプトで対話形式でコードを実行すると、returnが返されます。

しかし、ファイルで実行すると自動的には実行されません。戻り値を正確に表示しない場合、戻り値は無視され、何も出力されません。

+0

私は知っていますが、なぜこのプログラムはreturn文なしで再帰していますか? 3つの異なる出力を得るには、format(s [0]、t [0])、s、tが毎回異なる必要があり、このプログラムが再帰することを証明します。だから私はreturn文なしで投稿したコードの最初の部分にnat_fn2(5)を試みました。私はこのプログラムが再帰し、k%2のelifステートメントがreturnステートメントを持っているので、2の答えを期待していました。しかし、私は何も返さない。私は今完全に失われています – Compsci

+0

'process_strings(s [1:]、t [1:])'は再帰的です。それは価値を返さないけれども、何らかの仕事をします。つまり、文字列を出力します。したがって、文字列を再帰的に出力します。 @Compsci – zhenguoli

+0

あなたとチャットできる方法はありますか?私はまだこの時点でちょっと混乱しています – Compsci