Python 如何用循环解这个方程?

Python 如何用循环解这个方程?,python,Python,这是顺序: 1, 2, 3, -1, 7, -10, 3, -73, … 实际上是这样的: t(n) = (t(n-3) * t(n-2)) - t(n-1) 例如:-10=(3*-1)-7 我使用了这个代码,但它不像我提供的这个等式 n1 = 1 n2 = 2 n3 = 3 m = eval(input("number: ")) if m < 4: if m == n1: print(n1) elif m == n2:

这是顺序:

1, 2, 3, -1, 7, -10, 3, -73, …
实际上是这样的:

t(n) = (t(n-3) * t(n-2)) - t(n-1)
例如:
-10=(3*-1)-7

我使用了这个代码,但它不像我提供的这个等式

n1 = 1
n2 = 2
n3 = 3
m = eval(input("number: "))
if m < 4:
    if m == n1:
        print(n1)
    elif m == n2:
        print(n2)
    elif m == n3:
        print(n3)
elif m >= 4:
    n4 = (n1 * n2 - n3)
    print(n4)
n1=1
n2=2
n3=3
m=评估(输入(“编号”))
如果m<4:
如果m==n1:
打印(n1)
elif m==n2:
打印(n2)
elif m==n3:
打印(n3)
elif m>=4:
n4=(n1*n2-n3)
打印(n4)

这是我找到
t(m)


这是我找到
t(m)


这可以使用递归方法处理,如下所示:

m=eval(输入(“数字”))
def递归_函数(n):

如果1可以使用递归方法处理,如下所示:

m=eval(输入(“数字”))
def递归_函数(n):

如果1这就是你可以做到的。这类似于斐波那契序列

n1 = 1
n2 = 2
n3 = 3
m = int(input("number: "))
if m < 4:
    if m == n1:
        print(n1)
    elif m == n2:
        print(n2)
    elif m == n3:
        print(n3)
    
else:
    for i in range(3, m):
        temp1, temp2 = n2, n3
        n3 = n1 * n2 - n3
        n1, n2 = temp1, temp2
    print(n3)
n1=1
n2=2
n3=3
m=int(输入(“数字:”)
如果m<4:
如果m==n1:
打印(n1)
elif m==n2:
打印(n2)
elif m==n3:
打印(n3)
其他:
对于范围(3,m)内的i:
temp1,temp2=n2,n3
n3=n1*n2-n3
n1,n2=temp1,temp2
打印(n3)

这就是你可以做到的。这类似于斐波那契序列

n1 = 1
n2 = 2
n3 = 3
m = int(input("number: "))
if m < 4:
    if m == n1:
        print(n1)
    elif m == n2:
        print(n2)
    elif m == n3:
        print(n3)
    
else:
    for i in range(3, m):
        temp1, temp2 = n2, n3
        n3 = n1 * n2 - n3
        n1, n2 = temp1, temp2
    print(n3)
n1=1
n2=2
n3=3
m=int(输入(“数字:”)
如果m<4:
如果m==n1:
打印(n1)
elif m==n2:
打印(n2)
elif m==n3:
打印(n3)
其他:
对于范围(3,m)内的i:
temp1,temp2=n2,n3
n3=n1*n2-n3
n1,n2=temp1,temp2
打印(n3)
序列=[1,2,3]
def find_值(n):
如果n<4:
返回序列[n-1]
其他:
计数=3
而计数<代码>序列=[1,2,3]
def find_值(n):
如果n<4:
返回序列[n-1]
其他:
计数=3
而计数A
O(n)
时空解:

def t(n):
arr=[1,2,3]
如果n<3:返回arr[n]
对于范围(n-3)内的i:
#用给定的方程式计算下一个数字,
#并将结果推送到临时数组中
arr.append(arr[-3]*arr[-2]-arr[-1])
打印(arr)#显示arr内容,可以删除此行
#返回数组的最后一项,即结果
返回arr[-1]
印刷品(t(10))
我们在这里不需要递归,它在空间和时间成本方面都会更有效。

A
O(n)
时间和空间解决方案:

def t(n):
arr=[1,2,3]
如果n<3:返回arr[n]
对于范围(n-3)内的i:
#用给定的方程式计算下一个数字,
#并将结果推送到临时数组中
arr.append(arr[-3]*arr[-2]-arr[-1])
打印(arr)#显示arr内容,可以删除此行
#返回数组的最后一项,即结果
返回arr[-1]
印刷品(t(10))


我们在这里不需要递归,它在空间和时间成本方面都会更有效。

为什么不使用您所知道的提供的方程?请您对方程进行更多解释。n是什么?当你在变量名中使用数字序列时,列表应该是更好的数据容器。我想再次强调,
eval
永远不应该用于输入数字!一个糟糕的演员也可以用这个来轰炸你的电脑。为什么不使用你所知道的公式呢?你能解释一下这个公式吗。n是什么?当你在变量名中使用数字序列时,列表应该是更好的数据容器。我想再次强调,
eval
永远不应该用于输入数字!一个不好的演员也可以用它来攻击你的电脑。由于递归的限制,这只适用于
m<1000
。同样的问题是一个循环。由于递归限制,这个循环只适用于
m<1000
。同样的问题是一个循环。由于递归限制,这个循环只适用于
m<1000
。同样的问题是循环。在这种情况下,可以使用列表来存储序列的值,直到填充了所需数量的元素。不需要递归。代码已更新以避免递归,并且内存效率高。更好的方法是::-)由于递归限制,此woll仅适用于
m<1000
。同样的问题是循环。在这种情况下,可以使用列表来存储序列的值,直到填充了所需数量的元素。不需要递归。代码已更新以避免递归,并且内存效率高。更好的方法是::-)列表会比临时变量更好,可读性更好。但是很好,它是
O(n)
而不是
O(3^n)
@wuerfelfreak:一个列表也会浪费大量额外的内存。这一点很好。我同意。一个列表会比临时变量更好,可读性更好。但是很好,它是
O(n)
而不是
O(3^n)
@wuerfelfreak:一个列表也会浪费大量额外的内存。这一点很好。我同意。谢谢,伙计,你刚刚解决了我的问题。非常感谢你!!!谢谢,伙计,你刚刚解决了我的问题。非常感谢你!!!
n1 = 1
n2 = 2
n3 = 3
m = int(input("number: "))
if m < 4:
    if m == n1:
        print(n1)
    elif m == n2:
        print(n2)
    elif m == n3:
        print(n3)
    
else:
    for i in range(3, m):
        temp1, temp2 = n2, n3
        n3 = n1 * n2 - n3
        n1, n2 = temp1, temp2
    print(n3)
sequence=[1,2,3]

def find_value(n):
    if n < 4:
        return sequence[n-1]
    else:
        count=3
        while count<n:
            sequence.append(sequence[0]*sequence[1]-sequence[2])
            sequence.pop(0)
            count=count+1
        return sequence[-1]

if __name__=="__main__":
    n=int(input("Enter digit"))
    print(find_value(n))