[英][Python]what's wrong with my recursions?
我想表演
[√(1/2+1/2*√1/2)] ---------(P1)
[√(1/2+1/2*√(P1)] ----------(P2)
[√(1/2+1/2*√(P2)]
etc.
找出P(nth)項
我現在有這個
from math import *
n=eval(input('fjeowijo'))
i=sqrt(1/2+1/2*(sqrt(1/2)))
def P(n):
for i in range(n):
g=sqrt(1/2+1/2*i)
i=sqrt(1/2+1/2*i)
print(g)
P(n)
當我為n輸入1時,結果為0.7071067811865476,僅等於部分“ sqrt(1/2)”。 為什么?
def P(n):
i = 0
g = sqrt(0.5+.5*sqrt(0.5)
while(i < n):
g = sqrt(0.5+0.5*g)
print(g)
可能是您要找的東西嗎?
如果您想使其遞歸
def P(n):
if n <= 0:
return 0.5
else:
return sqrt(0.5*(1+sqrt(P(n-1))))
算出來
>>> P(1)
0.9238795325112867
>>> P(2)
0.9902490907008235
>>> P(3)
0.9987774031336784
>>> P(4)
0.9998471169658009
正如@JoshRomRock指出的那樣,python通常會限制遞歸的最大深度(默認的最大深度取決於平台)。 對於CPython,默認限制為1000。
如果您想更改此限制,請執行以下操作:
import sys
sys.setrecursionlimit(5000)
注意:在這種情況下,浮點表示形式提供的精度可能是計算的最大障礙。 請參閱官方文檔,以獲取有關使用浮點數的更多信息。
第二個注意事項:如果P
函數要多次使用和/或在程序代碼的多個點使用, 則應將其作為庫函數使用Memoization實現。 請在此處查看python中的一些示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.