繁体   English   中英

将递归 function 重写为迭代方法

[英]Rewriting recursive function to iterative approach

您将如何在不递归的情况下重写此 python 代码?

def f(n):
   if n == 1:
       return 2
   elif n == 2:
       return 1
   elif n == 3 or n == 4:
       return n
 
   r1 = f(n-1)
   r2 = f(n-2)
   r3 = f(n-3)
   r4 = f(n-4)
 
   return (r1+r2+r3)/r4

您可以保留初始条件,然后在n=5时使用r1, r2, r3, r4的值。 然后迭代直到你达到你的n ,通过旋转值并计算下一个比率

def f_vars(n):
    initial_values = [2, 1, 3, 4]
    if n <= len(initial_values):
        return initial_values[n - 1]

    r3, r2, r1, next_n = initial_values

    for _ in range(n - 4):
        r4, r3, r2, r1 = r3, r2, r1, next_n
        next_n = (r1 + r2 + r3) / r4

    return next_n

使用数组也可以实现,但性能较低

def f_array(n):
    initial_values = [2, 1, 3, 4]
    if n <= len(initial_values):
        return initial_values[n - 1]

    for _ in range(n - 4):
        initial_values.append(sum(initial_values[1:]) / initial_values[0])
        initial_values.pop(0)

    return initial_values[-1]

一些时间信息

  • n=10_000_000f_vars大约需要2sec
  • n=10_000_000f_array大约需要10sec
  • n=29f (recursive)大约需要12sec

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM