递归,使用输入调用函数

时间:2011-02-14 17:37:28

标签: python function recursion input

我正在研究一些递归的东西。我已经在十二天的圣诞节中创造了一些函数,但是我想不出一种使用输入来调用函数的方法。我举个例子:

def day1():
    print 'A Partridge in a Pear Tree'
def day2():
    print '2 Turtle Doves'
    day1()
def day3():
    print '3 French Hens'
    day2()

我尝试在诸如

之类的函数中使用if语句
def DaysOfXmas(n):
    if n == 1:
        day1()
    if n == 2:
        day2()
    if n == 3:
        day3()

但这感觉就像是一种可怕而混乱的方式。 有什么建议吗?

3 个答案:

答案 0 :(得分:2)

嗯,你可以globals()['day%d' % n](),但那更加可怕和混乱。

将函数放入集合中。例如,如果需要稀疏或非整数键,则为列表或dict。 day_funcs = [day0, day1, day, day3]day0应该是一个占位符,如果你在盲目获取项目并调用它之前检查输入,则不可调用的工作 - 如果不是,用户会得到一个看似完全不相关的丑陋错误)并在调度程序中使用day_funcs[n]()。您可以通过多种方式使其更加干燥:需要最后一次打字的那种(但也会因其他命名方案而倒下)将把函数(和那些)放入一个单独的模块中导入后,定义day_funcs = sorted(inspect.getmembers(the_module, isfunction))

答案 1 :(得分:2)

days = ['A Partridge in a Pear Tree',
        '2 Turtle Doves',
        '3 French Hens']

def sing(n=0):
    print days[n]
    try:
        sing(n+1)
    except IndexError:
        return

这是一个使用递归循环的简单示例。但是,除了理解它之外,不要在Python中这样做。使用for循环,该函数更容易编写(并且更有效)。

答案 2 :(得分:0)

递归背后的想法是你在任意输入上都有一组一致的操作,并设置一个或多个可能做一些特殊操作的基本情况,并结束递归调用。

如果你想为12个输入值做一些不同的事情,可以考虑使用给定输入的输出映射(然后用递减的输入值再次调用该函数),或者你有12个基本情况。