首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[Python]我的递归怎么了?

[Python]我的递归怎么了?
EN

Stack Overflow用户
提问于 2015-10-30 08:40:25
回答 2查看 57关注 0票数 0

我想打孔

代码语言:javascript
复制
  [√(1/2+1/2*√1/2)]  ---------(P1)
  [√(1/2+1/2*√(P1)]  ----------(P2)
  [√(1/2+1/2*√(P2)]  
  etc.

找出P(N)项

我现在有这个

代码语言:javascript
复制
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)

当输入1为n时,结果为0.7071067811865476,仅等于部分“sqrt(1/2)”。为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-30 08:52:05

如果您想让它递归执行

代码语言:javascript
复制
def P(n):
    if n <= 0:
        return 0.5
    else:
        return sqrt(0.5*(1+sqrt(P(n-1))))

它的作用是

代码语言:javascript
复制
>>> P(1)
0.9238795325112867
>>> P(2)
0.9902490907008235
>>> P(3)
0.9987774031336784
>>> P(4)
0.9998471169658009

正如@JoshRomRock所指出的,python通常限制递归的最大深度(默认的最大深度取决于平台)。对于CPython,默认限制为1000。

如果您想更改这样的限制,请执行:

代码语言:javascript
复制
import sys
sys.setrecursionlimit(5000)

注:在这种情况下,浮点表示提供的精度很可能是计算的最大障碍。有关使用浮点数的更多信息,请参见官方文件

第二个注意事项:如果P函数将被多次使用和/或在程序代码的多个点中使用,作为库函数,使用追忆实现它是有意义的。有关python中的一些示例,请参见这里

票数 0
EN

Stack Overflow用户

发布于 2015-10-30 08:46:07

代码语言:javascript
复制
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)

会不会是你要找的?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33431738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档