2017-06-18 132 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