下面是一个将代码从四阶级数转换为n阶级数的示例:
- 四阶级数:
def func(n):
if n <= 0:
return 0
elif n == 1:
return 1
elif n == 2:
return 1
elif n == 3:
return 2
else:
return func(n-1)+func(n-2)+func(n-3)+func(n-4)
- n阶级数:
def func(n, orders=[]):
if n <= 0:
return 0
elif n == 1:
return 1
else:
total = 0
for i in range(len(orders)):
if n <= i + 1:
total += orders[i]
if total != 0:
return total
else:
for i in range(len(orders), n):
tmp = 0
for j in range(len(orders)):
tmp += orders[j]
orders.append(tmp)
orders.pop(0)
return orders[-1]
在这个新函数中,我们使用一个清单来保存前面的次序。在每次递归调用中,我们都会检查 n 是否已经在前几个项中处理过。如果是,则我们可以从 orders 列表中的相应项中获得它。否则,我们就为 orders 添加一个新项,计算它,并将它插入到最后一项之前,然后弹出第一项。
例如,如果我们将 orders 初始化为空列表,并调用 func(10),则该函数将返回以下结果: 47。这是因为按照序列的定义,第十项是47,而列表中仅有的前9个项也是准确的,所以没有必要计算它们。
注意,如果你要多次调用这个函数,你需要在每次调用它时都记得清空 orders 列