免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3212 | 回复: 9
打印 上一主题 下一主题

实数=>整数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-10 19:26 |只看该作者 |倒序浏览
众所周知,斐波那契数满足公式:

现在要变成实现(只能用通项公式)
并保存在数组里。

不知道如很把它变成int类。

论坛徽章:
0
2 [报告]
发表于 2009-04-10 21:38 |只看该作者
不知是不是你要的
>>> def fib(n):
...     return [int((((1+5**0.5)/2)**i-((1-5**0.5/2)**i)/5**0.5) for i in range
(1,n+1)]
...
>>> fib(10)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>>

论坛徽章:
0
3 [报告]
发表于 2009-04-10 22:25 |只看该作者

回复 #2 yaksavage 的帖子

你的有地方少了个括号啊. ..((1-5**0.5/2)**i) 在/2前边应该还有一个小括号...

应该是这样吧
>>> def fib(n):
...     return [int((((1+5**0.5)/2)**i-((1-5**0.5)/2)**i)/5**0.5) for i in range(1,n+1)]
>>> d=fib(1000)
>>> for i in range(len(d)-2):
...     if d+d[i+1] != d[i+2]:
...          print i
...          break
...
69
>>> d[69]
190392490709135L
>>> d[70]
308061521170129L
>>> _+d[69]
498454011879264L
>>> d[71]
498454011879265L

可以看到,在第七十个就出问题了....估计还是用递归的好....

论坛徽章:
0
4 [报告]
发表于 2009-04-11 09:46 |只看该作者
def fab(n):
    lst=[1,1]
    if n in [0,1]:
        return lst[n]
    for i in range(2,n+1):
        tmp = lst[i-1]+lst[i-2]
        lst.append(tmp)
    return lst[n]
def main():
    print fab(100)

if __name__ == '__main__':
    main()


用递归实现斐波那契数很不明智。递归太耗空间和时间了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2009-04-11 10:13 |只看该作者
原帖由 千年沉寂 于 2009-4-11 09:46 发表
def fab(n):
    lst=[1,1]
    if n in [0,1]:
        return lst[n]
    for i in range(2,n+1 ...

递归不好,递推不错。尤其是需要列表时。
当然了,如果只求某一项,那还是应该用通项公式。

论坛徽章:
0
6 [报告]
发表于 2009-04-11 11:36 |只看该作者

回复 #5 flw 的帖子

通项公式计算的时候会有误差。
2楼程序fib(10)的计算结果是:
[0, 1, 1, 3, 4, 8, 12, 21, 33, 55]

论坛徽章:
0
7 [报告]
发表于 2009-04-11 11:41 |只看该作者

回复 #5 flw 的帖子

def fib(n):
...     return [int((((1+5**0.5)/2)**i-((1-5**0.5)/2)**i)/5**0.5) for i in range (1,n+1)]
...
二楼的公式写错了,少了一个括号

论坛徽章:
0
8 [报告]
发表于 2009-04-11 11:45 |只看该作者
>>> def fib(i):
...     return int((((1+5**0.5)/2)**i-((1-5**0.5)/2)**i)/5**0.5)
...
>>> fib(5000)
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "<interactive input>", line 2, in fib
OverflowError: (34, 'Result too large')
>>>

论坛徽章:
0
9 [报告]
发表于 2009-04-12 08:48 |只看该作者
>>> import sympy
>>> sympy.fibonacci(5000)
3878968454388325633701916308325905312082127714646245106160597214895550139044037097010822916462210669479293452858882973813483102008954982940361430156911478938364216563944106910214505634133706558656238254656700712525929903854933813928836378347518908762970712033337052923107693008518093849801803847813996748881765554653788291644268912980384613778969021502293082475666346224923071883324803280375039130352903304505842701147635242270210934637699104006714174883298422891491273104054328753298044273676822977244987749874555691907703880637046832794811358973739993110106219308149018570815397854379195305617510761053075688783766033667355445258844886241619210553457493675897849027988234351023599844663934853256411952221859563060475364645470760330902420806382584929156452876291575759142343809142302917491088984155209854432486594079793571316841692868039545309545388698114665082066862897420639323438488465240988742395873801976993820317174208932265468879364002630797780058759129671389634214252579116872755600360311370547754724604639987588046985178408674382863125

论坛徽章:
0
10 [报告]
发表于 2009-04-12 12:43 |只看该作者
http://docs.python.org/library/stdtypes.html#typesnumeric
在这里提示说用math.floor但好像也没用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP