0

我不确定如何让我的递归正常工作或避免无限重复。这是我到目前为止所拥有的:

def listSquareR(lst):
    if len(lst)== 1:
        return lst[0]**2
    else:
        return lst[0]**2+[listSquareR(lst[1:])]

最后的返回线明显是错误的

4

3 回答 3

2

另一种可能:

def listSquare(L):
  if L: return [L[0]**2] + listSquare(L[1:])
  else: return []

一个更短的版本(正如 Cristian Ciupitu 在下面提到的)是:

def listSquare(L):
  return [L[0]**2] + listSquare(L[1:]) if L else []
于 2014-04-15T00:55:43.107 回答
1

你几乎是对的,但关键是要注意你的类型。在您的代码中:

def listSquareR(lst):
    if len(lst)== 1:
        return lst[0]**2  # Returning a number
    else:
        return lst[0]**2+[listSquareR(lst[1:])]  # Returning a number plus a list of a list

我们只需要两个小修复:

def listSquareR(lst):
    if len(lst)== 1:
        return [lst[0]**2]  # Returning a list
    else:
        return [lst[0]**2] + listSquareR(lst[1:])  # Returning a list plus a list
于 2014-04-15T00:52:56.877 回答
1
def SquareArea(width):
if width == 0:
    return 0
else:
    return SquareArea(width-1) + (2*width-1)

这是我最近用来求正方形面积的递归函数。由于正方形的面积是 Side*Side,因此可以使用它来找到任何函数的平方。现在你需要做的就是做一个循环,例如:

for i in range (list):

并在 i 上实现此功能,或者使用 while 循环。

newList=[]
length = len(list)
while i != length:
   newList.append(SquareArea(i))

然后返回 newList

于 2018-03-04T13:24:51.683 回答