数学运算符的递归函数

时间:2015-03-25 20:26:07

标签: python python-3.x

我想构建一个带有两个自然数n和m的函数,并返回一个以n开头并以m-1结尾的所有自然数的平方元组。如果m小于n,我能够决定函数是否应该返回,但它不应该崩溃或返回某种错误消息。因此,square_tuple(3,7)返回(9,16,25,36),rec_range(10,11)返回(100,)。另外,我不想使用range(),map(),循环或列表。以下是我到目前为止的情况:

def squares_tuple(n,m):
"""takes two nat nums n and m and returns a tuple of the squares of all the
natural numbers starting with n and ending with m-1

nat, nat -> tuple of natural numbers"""
   if m >= 0:
       return 0
   else:
       return squares_tuple(n - 1, ) + (n**m, )

有点卡在这一点......

2 个答案:

答案 0 :(得分:4)

def squares_tuple(n, m):
    return (n * n, ) + squares_tuple(n + 1, m) if n < m else ()

示例:

>>> squares_tuple(0, 6)
(0, 1, 4, 9, 16, 25)
>>> squares_tuple(3, 7)
(9, 16, 25, 36)

答案 1 :(得分:1)

这是否必须是递归函数?如果没有,那么最好的解决方案是:

def squares_tuple(start, stop):
    return tuple([num**2 for num in range(start, stop)])