如何移除n-bonacci递归函数中的循环?改用合法方式实现求和
替换n-bonacci递归函数中的for循环实现
我编写了一个用于计算n-bonacci序列第m项的递归函数,但代码被完全禁止使用for和while循环。需要替换以下for循环段:
for i in range(1, n+1): temp += n_bonacci(n,m-i)
改用允许的方式(如sum()等内置函数、列表推导式)实现相同逻辑。
修改后的完整代码
def n_bonacci(n,m): # n是初始项的数量;m是要计算的第m项 if m < n-1: return 0 elif m == n-1: return 1 else: # 用生成器表达式结合sum()替代循环累加 return sum(n_bonacci(n, m-i) for i in range(1, n+1)) print("n_bonacci:", n_bonacci(2,10)) print("n_bonacci:", n_bonacci(7,20))
替换说明
原循环的作用是累加m-1到m-n位置的n-bonacci值,用sum()结合生成器表达式可以直接完成这个累加操作——生成器表达式会依次生成i从1到n时n_bonacci(n, m-i)的结果,sum()自动将这些结果求和,完全替代了原循环的逻辑,而且不需要额外的临时变量temp。
你之前尝试的列表推导式[temp += n_bonacci(n,m-i) for i in range(n)]不合适,因为列表推导式是用来生成列表的,不适合执行赋值操作,而生成器表达式更适配这种仅需逐个生成值来求和的场景。
内容的提问来源于stack exchange,提问作者Tuan
相关产品推荐
相关产品推荐

