Python 中没有递归的 Fib2 函数

Fib2 function without recursion in Python

我需要帮助来定义 fibanocci 2 函数。 fibanocci 2 函数描述为: fib2(n) = {0 如果 n <= 0, 1 如果 n = 1, 2 如果 n = 2, ( fib2( n - 1) * fib2( n - 2)) - fib2( n - 3) else}

我们需要迭代定义这个函数。 我尽了最大的努力,但还是写不出有效的代码。

def fib2(n: int) -> int:
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    elif n == 2:
        return 2
    else:
        n = ((n - 1) * (n - 2) - (n - 3)
    return n
a = fib2(7)
print (a)
assert (fib2(7) == 37) 

这个 fib2 函数的输出是 26,但它应该是 37。 提前谢谢你

您不能更改参数的值。 请尝试直接 return : Return ((fb2(n-1)×fb2(n-2))-fb2(n-3)) 所以它将作为递归函数工作。

def fibo(n):
    current = 0
    previous_1 = 1
    previous_2 = 0
    
    for i in range(1,n):
        current = previous_1 + previous_2
        previous_2 = previous_1
        previous_1 = current
    return current

要迭代进行,最好的方法是将其写在纸上以了解其工作原理。

数学上斐波纳奇是 Fn = Fn-1 + Fn-2。因此,您可以创建名为 previous_1previous_2 的变量,它们代表 Fn 的元素,您只需在每个 运行.

上更新它们

Fncurrent

对于迭代版本,您必须使用 for 循环。 只需将前 3 个数字相加即可得到下一个数字。

这是一段代码:

def fib3(n):
    a = 0
    b = 1
    c = 0
    for n in range(n):
        newc = a+b+c
        a = b
        b = c
        c = newc
    return newc

print(fib3(7))
assert (fib3(7) == 37)