Python 如何计算在没有循环的情况下需要多少个循环?
如果我有一个值a,它被当前值的10%递增,同时被固定量B拿走,我如何计算在不实际循环的情况下达到0需要多少个循环 这就是我通过循环找到它的方式:Python 如何计算在没有循环的情况下需要多少个循环?,python,algorithm,loops,math,Python,Algorithm,Loops,Math,如果我有一个值a,它被当前值的10%递增,同时被固定量B拿走,我如何计算在不实际循环的情况下达到0需要多少个循环 这就是我通过循环找到它的方式: LoopsNeeded = 0 A = 100 B = 20 while A > 0: C = A * 0.1 A = A + C A = A - B LoopsNeeded = LoopsNeeded + 1 print(LoopsNeeded) 在第一个循环中: 这导致总共需要8个循环,如果我使用非常大的数字执行此操
LoopsNeeded = 0
A = 100
B = 20
while A > 0:
C = A * 0.1
A = A + C
A = A - B
LoopsNeeded = LoopsNeeded + 1
print(LoopsNeeded)
在第一个循环中:
这导致总共需要8个循环,如果我使用非常大的数字执行此操作,此循环可能需要很长时间,执行此操作的较短方法是什么?让Ai为迭代I后a的值,其中A0为100
让我们为Ai创建一个递归公式:
Ai=Ai−1 · 1.1 − B
如果我们将其展开,我们会得到:
Ai=Ai−2 · 1.1 − B·1.1− B=人工智能−2 · 1.12 − B·1.1− B
Ai=Ai−3 · 1.1 − B·1.12− B·1.1− B=人工智能−3 · 1.13 − B·1.12− B·1.1− B
...
Ai=A0·1.1i− B·1.10+1.11+⋯ + 1.1i−一,
因此:
Ai=100·1.1i− 10·B·1.1i− 一,
或一般而言:
Ai=A0·1+pi− B·1+pi-1/p
为了找到A==0之后的迭代i,我们可以设置Ai=0并求解i:
0=人工智能
0=100·1.1i− 10·B·1.1i− 1.
1.1i=10·B·1.1i− 1.
i=log1.1 10·B/10·B− 一百
或一般而言:
i=logp+1-B/p·A0− B
对于B=20,则i=7.2。我们凑在一起,确实得到了8分
时间复杂度为O1。设Ai为迭代i后A的值,其中A0为100
让我们为Ai创建一个递归公式:
Ai=Ai−1 · 1.1 − B
如果我们将其展开,我们会得到:
Ai=Ai−2 · 1.1 − B·1.1− B=人工智能−2 · 1.12 − B·1.1− B
Ai=Ai−3 · 1.1 − B·1.12− B·1.1− B=人工智能−3 · 1.13 − B·1.12− B·1.1− B
...
Ai=A0·1.1i− B·1.10+1.11+⋯ + 1.1i−一,
因此:
Ai=100·1.1i− 10·B·1.1i− 一,
或一般而言:
Ai=A0·1+pi− B·1+pi-1/p
为了找到A==0之后的迭代i,我们可以设置Ai=0并求解i:
0=人工智能
0=100·1.1i− 10·B·1.1i− 1.
1.1i=10·B·1.1i− 1.
i=log1.1 10·B/10·B− 一百
或一般而言:
i=logp+1-B/p·A0− B
对于B=20,则i=7.2。我们凑在一起,确实得到了8分
时间复杂度是O1。B总是A的20%吗?@christophperrins他说B是固定常数,所以我不这么认为。有趣的是,它要么趋向于-无限,要么趋向于无限@谢谢你,我还以为sameIt不是无限的?我运行了当前代码,最后得到了所需的8个循环@christophperrins@Casabias抱歉造成混淆,它趋于-无限,直到达到0。如果A是100,B是9,它不会停止增加。如果A是100,B是10,它不会改变。如果A是100,B是11,它不会停止下降,直到它达到0。B总是A的20%吗?@christophperrins他说B是固定常数,所以我不这么认为。有趣的是,然后它会趋向于-无限或无限@谢谢你,我还以为sameIt不是无限的?我运行了当前代码,最后得到了所需的8个循环@christophperrins@Casabias抱歉造成混淆,它趋于-无限,直到达到0。如果A是100,B是9,它不会停止增加。如果A是100,B是10,它不会改变。如果A是100,B是11,它不会停止下降,直到它达到0。如果你想让我详细说明一些行,请问。我用几何序列求和做了一些快捷方式。我对数学不太熟悉,在将其转换为python代码方面,我会看这一行吗?i=登录10*B*1.1^i-1-1中的1.1,如果我还没有定义,我如何运行此语句?@Casabias非常抱歉,只是一些复制错误,请重新阅读此部分。太好了!我得到了预期的7.27254089797341713,还没有尝试其他值/比较速度,但我必须导入数学库以使用math.log,这可以在没有日志的情况下完成吗?即不使用任何导入的本机python?对于值A=500和B=200,A每次递增5%,会发生什么变化?我假设对数是1.05?但我对10*B/10*B-100部分感到困惑,因为这里有10和100的静态值,它们会是什么?如果你想让我在某行详细说明,请询问。我用几何序列求和做了一些快捷方式。我对数学不太熟悉,在将其转换为python代码方面,我会看这一行吗?i=登录10*B*1.1^i-1-1中的1.1,如果我还没有定义,我如何运行此语句?@Casabias非常抱歉,只是一些复制错误,请重新阅读此部分。太好了!我得到了预期的7.27254089797341713,还没有尝试其他值/比较速度,但我必须导入数学库以使用math.log,这可以在没有日志的情况下完成吗?即不使用任何导入的本机python?用于值A= 500,B=200,A每次增加5%,会发生什么变化?我假设对数是1.05?但我对10*B/10*B-100部分感到困惑,因为这里有10和100的静态值,它们是什么?
initial values
A = 100
B = 20
-------
A > 0 = True
C = A(100) * 0.1 = 10
A = A(100) + C(10) = 110
A = A(110) - B(20) = 90
LoopsNeeded = 1
-------
A is now 90 on the next round of the loop