2017-06-18 190 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的值,這也是預期的。因此,應用相同的概念,我想這樣的代碼:返回語句vs不返回語句?

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:]) 

我試過process_strings("cat","dog"),期待無,因爲在遞歸不歸路。然而,我仍然有一個答案:

cd 
ao 
tg 

我明白它是如何得到這些值。但是沒有回報聲明。爲什麼這個工作?

+1

函數**做了**返回無 –

+0

您的只是打印值,函數沒有返回它們。 –

+0

我不太明白。對不起,我是Python新手。那麼當我做遞歸而沒有返回時發生了什麼?在遞歸之前它是否仍然遞歸或停止? – Compsci

回答

1

你得到的不是返回值,而是print聲明的輸出。
如果你在交互式提示符下以交互方式運行你的代碼,它將回顯return

但是,如果你在一個文件中運行它,它不會自動執行。如果您沒有完全打印返回值,它將忽略返回值並不輸出任何內容。

+0

我知道,但爲什麼這個程序遞歸開始沒有返回語句?要獲得3種不同的打印輸出,格式(s [0],t [0]),s和t必須每次都不同,證明該程序遞歸。所以我嘗試nat_fn2(5)到我沒有返回聲明發布的第一段代碼。我期待2的答案,因爲這個程序遞歸併且帶有k%2的elif語句有一個return語句。然而我沒有得到任何回報。我現在完全丟失了 – Compsci

+0

'process_strings(s [1:],t [1:])'是遞歸的。雖然它沒有回報價值,但它做了一些工作。也就是說,它會打印字符串。所以它遞歸地打印字符串。 @Compsci – zhenguoli

+0

有什麼方法可以和你聊天嗎?我還是有點困惑,在這個聊天室裏聊天 – Compsci