Python 如何计算在没有循环的情况下需要多少个循环?

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个循环,如果我使用非常大的数字执行此操

如果我有一个值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个循环,如果我使用非常大的数字执行此操作,此循环可能需要很长时间,执行此操作的较短方法是什么?

让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