有没有更有效的方法来编写这个迭代函数



我最近一直在处理递归和迭代函数。我在下面的例子中尝试了以下内容:

我有Pascal三角形的递归版本:

def pascal_recursion(n):
""" rekursive Version of Pascal-Function """
if n == 1:
return [1]
else:
line = [1]
old_line = pascal(n-1)
for i in range(len(old_line)-1):
line.append(old_line[i] + old_line[i+1])
line += [1]
return line

现在我想在不调用函数的情况下编写它的迭代版本,该函数在斐波那契级数中变得更有效。因此,如果输入是pascal_iterive(4(,那么它应该给出帕斯卡三角形的第四行。但不幸的是,我总是得到与前一行相同的结果。

def pascal_iterative (n):
"""iterative version of Pascal-Function"""
oldline, newline = [1], [1, 1]
if n == 1:
return [1]
for i in range(n-1):
oldline, newline = newline, [oldline[0]] + [oldline[i] + oldline[i+1] for i in range(len(oldline) - 1)] + [oldline[-1]]
return newline

你知道我做错了什么吗?提前感谢!

在函数的倒数第二行,将所有oldlines更改为newlines:

def pascal_iterative (n):
oldline, newline = [1], [1, 1]
if n == 1:
return [1]
for i in range(n-1):
oldline, newline = newline, [newline[0]] + [newline[i] + newline[i+1] for i in range(len(newline) - 1)] + [newline[-1]]
return newline

这对我来说很合适。

此外,这可以简化,因为您不需要换行符和换行符:

def pascal_iterative (n):
line = [1]
for i in range(n-1):
line = [line[0]] + [line[i] + line[i+1] for i in range(len(line) - 1)] + [line[-1]]
return line

最新更新