平方数降序直到1

时间:2018-10-07 17:46:43

标签: python

我想编写一个函数,该函数接受一个参数(整数),并以降序输出直到1为止的平方数列表。我想使用递归而不是列表推导或循环。 这是我的代码:

def sqr(num):
    mylist = []
    if num == 1 or num == 0:
        mylist.append(num)
        return mylist
    else:
        num = num**2
        mylist.append(num)
        num = num-1
        mylist.append(sqr(num))
    return mylist

现在我的代码生成子列表,如何防止这种情况?

4 个答案:

答案 0 :(得分:1)

一种实现此目的的方法是将一个空列表与数字一起传递到您的函数中。

def get_squares(num, lista):
    if num in (1, 0):
        lista.append(num)
        return lista
    else:
        lista.append(pow(num, 2))
        num -= 1
        return get_squares(num, lista)

number = int(input('Enter a number: '))
print(get_squares(number, []))
# [10000, 9801, 9604,... , 36, 25, 16, 9, 4, 1]

答案 1 :(得分:0)

将列表作为可选参数。

def sqr(num, mylist=None):
    mylist = mylist or []
    if num == 1 or num == 0:
        mylist.append(num)
        return mylist
    else:
        mylist.append(num**2)
        num = num-1
        sqr(num, mylist)
    return mylist

答案 2 :(得分:0)

这是您的递归函数。 说明:数字n的平方附加在开头定义的mylist后面。然后使用参数sqr再次调用函数n-1。如果n-1 == 1,它将在函数后附加1并返回最终列表,而无需进一步返回0 else ,它将继续迭代地sqr调用存储大于1的数字平方。

mylist = []

def sqr(num):
    if num == 1:
        mylist.append(num)
        return mylist # appended list returned if 1 is reached
    else:
        mylist.append(num**2)
        return sqr(num-1) # Recursive call here to sqr()
print (sqr(4))

# [16, 9, 4, 1]

答案 3 :(得分:-1)

这就是你想要的吗?

def sqr(num,l=[]):
     if num == 1: return l+[num]
     else : return sqr(num-1,l+[num**2])

尽管如此,但我希望您牢记列表理解将使Python的效率提高100倍,而且效率更高。