鱼C论坛

 找回密码
 立即注册
查看: 1604|回复: 6

[已解决]斐波那契数列求和题

[复制链接]
发表于 2020-3-17 18:49:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377......,即从第3项开始,每一项都等于前两项之和,计算500之内的该数列所有项数之和。
sum = 0
n = 0
def fib_loop(n):
    a,b = 0,1
    for i in range(n):
        a,b = b,a+b
    return a

for i in range(15):
    sum = sum + fib_loop(n-1) + fib_loop(n-2)
    n = n + 1
    
print(sum)

代码求出来的结果是985,但答案是986.
烦请大佬们指正一下如何修改!!
感谢!!
最佳答案
2020-3-17 19:16:45
为什么你每次循环要加两项呢。若是你想的是每次加的都是前两项的和,那样你就漏掉了第一项。
你看一下你的程序,sum每次加的内容是什么
sum = 0
n = 0
def fib_loop(n):
       a,b = 0,1
       for i in range(n):
              a,b = b,a+b
       return a

for i in range(15):
       a=fib_loop(n-1);b=fib_loop(n-2)
       print('%4d%4d%4d\t'%(a,b,a+b))
       sum = sum + fib_loop(n-1) + fib_loop(n-2)
       n += 1
    
print(sum)
第三列是你想sum上加的内容
   0   0   0        
   0   0   0        
   1   0   1        
   1   1   2        
   2   1   3        
   3   2   5        
   5   3   8        
   8   5  13        
  13   8  21        
  21  13  34        
  34  21  55        
  55  34  89        
  89  55 144        
 144  89 233        
 233 144 377        
985

正确的程序应该是下面这样:
sum = 0
def fib_loop(n):
       a,b = 0,1
       for i in range(n):
              a,b = b,a+b
       return a

for i in range(15):
       sum = sum + fib_loop(i)
    
print(sum)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-17 19:06:53 | 显示全部楼层
sum应该从1开始:
sum = 1
n = 0
def fib_loop(n):
    a,b = 0,1
    for i in range(n):
        a,b = b,a+b
    return a

for i in range(15):
    sum = sum + fib_loop(n-1) + fib_loop(n-2)
    n += 1
    
print(sum)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-17 19:08:34 | 显示全部楼层

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 19:16:45 | 显示全部楼层    本楼为最佳答案   
为什么你每次循环要加两项呢。若是你想的是每次加的都是前两项的和,那样你就漏掉了第一项。
你看一下你的程序,sum每次加的内容是什么
sum = 0
n = 0
def fib_loop(n):
       a,b = 0,1
       for i in range(n):
              a,b = b,a+b
       return a

for i in range(15):
       a=fib_loop(n-1);b=fib_loop(n-2)
       print('%4d%4d%4d\t'%(a,b,a+b))
       sum = sum + fib_loop(n-1) + fib_loop(n-2)
       n += 1
    
print(sum)
第三列是你想sum上加的内容
   0   0   0        
   0   0   0        
   1   0   1        
   1   1   2        
   2   1   3        
   3   2   5        
   5   3   8        
   8   5  13        
  13   8  21        
  21  13  34        
  34  21  55        
  55  34  89        
  89  55 144        
 144  89 233        
 233 144 377        
985

正确的程序应该是下面这样:
sum = 0
def fib_loop(n):
       a,b = 0,1
       for i in range(n):
              a,b = b,a+b
       return a

for i in range(15):
       sum = sum + fib_loop(i)
    
print(sum)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-17 19:34:03 | 显示全部楼层

你不要误导人家好不好。
求和结果不对是因为求和的这一组数不对,怎么能是求和初始值的错呢?

[1,2,3,4]求和不等于20,你就说是求和初始值不对,初始值应该是10?这分明就是求和的这一组数选的不对,根本求不出来20嘛。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
qiuyouzhi + 5 + 5 + 3 谢谢指出,没细看~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-17 19:53:19 | 显示全部楼层
sunrise085 发表于 2020-3-17 19:34
你不要误导人家好不好。
求和结果不对是因为求和的这一组数不对,怎么能是求和初始值的错呢?


@zltzlt 以修正最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-18 11:03:18 | 显示全部楼层
sunrise085 发表于 2020-3-17 19:16
为什么你每次循环要加两项呢。若是你想的是每次加的都是前两项的和,那样你就漏掉了第一项。
你看一下你的 ...

谢谢!因为我是小白,求和的式子就是把题目要求直译了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 01:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表