Python:传递一个函数并递归调用它

时间:2014-04-01 03:03:09

标签: python function recursion

目标是将函数和数字作为参数传递给另一个函数,然后递归调用传递的函数n次。我实现了这两种方式。此版本按预期工作,打印Hello World 3次:

def do_n(fx, n):
    if n <= 0:
        return
    else:
        print(fx)
        do_n(fx, n-1)

def return_greeting():
    return "Hello World"

do_n(return_greeting(), 3)

此版本不起作用。它仅打印Hello World一次,然后在第一次通过后似乎失去了被调用函数:

def do_n(fx, n):
    if n <= 0:
        return
    else:
        fx
        do_n(fx, n-1)

def print_greeting():
    print("Hello World")

do_n(print_greeting(), 3)

有人可以解释为什么第二个版本不会导致print_greeting被调用3次并将Hello World打印3次到屏幕上吗?

3 个答案:

答案 0 :(得分:2)

第二个版本没有调用print_greeting三次 - 实际上,两个版本都没有。

您只需在每个代码段的最后一行调用print_greeting一次。在该行中,您调用它,并返回字符串,您只需将字符串传递到do_n函数。

您可以对第二个代码段进行两项更改,以使其按照您认为应该执行的操作进行:

首先,不要在最后一行调用print_greeting。它应该是这样的:

do_n(print_greeting, 3)

这样,您将实际函数print_greeting传递给do_n函数。

其次,调用传递的函数(现在称为fx),如下所示:

fx()

这里的括号表示&#34;调用此函数&#34;。

整个代码段应如下所示:

def do_n(fx, n):
    if n <= 0:
        return
    else:
        fx()
        do_n(fx, n-1)

def print_greeting():
    print("Hello World")

do_n(print_greeting, 3)

答案 1 :(得分:1)

声明fx没有做任何事情。我想你想说fx()来实际调用这个函数。

答案 2 :(得分:0)

在第一个版本中,您将Hello World字符串传递给do_n函数并打印n次,这就是为什么它只打印n次(实际上您没有调用该函数)。

在第二个版本中,你有字符串,但你只是声明它。如果你想真正调用这个函数,你必须改变你的代码:

def do_n(fx, n):
    if n <= 0:
        return
    else:
        fx()
        do_n(fx, n-1)

def return_greeting():
    print "Hello World"

do_n(return_greeting, 3)