簡體   English   中英

[Python]我的遞歸有什么問題?

[英][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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM