这是否正常工作 - Python 3 中的斐波那契总和
Is this working properly - Sum of Fibonacci in Python 3
我有一个任务是编写一个程序,对前 100 个斐波那契数进行求和。我检查了 Python 中的输出和 QBasic 64 中的输出,它们并不相同。我也检查了不同的输入。
Input: 10
Output: 89
-----------
Input: 100
Output: 573147844013817084101
是否正确?
这是我的代码:
n = int(input())
print()
p = 0
d = 1
z = p + d
print(str(p) + ' + ' + str(d) + ' = ' + str(z))
for i in range(n - 2):
p = d
d = z
z = p + d
print(str(p) + ' + ' + str(d) + ' = ' + str(z))
print('Sum:', z)
编辑:再次编辑代码,现在检查。我刚在维基百科上找到。这取决于你从什么数字开始循环。因此,如果我使用 (0, 1, 1, 2, 3, 5, 8, 13, 21, 和 34) 作为前 10 个斐波那契数,总和将为 88,而不是 89。
前十位和前一百位斐波那契数之和分别为88和573147844013817084100:
>>> cache = {}
>>> def fib(n):
if n == 0: return 0
if n == 1: return 1
if not n in cache:
cache[n] = fib(n - 1) + fib(n - 2)
return cache[n]
>>> sum([fib(i) for i in range(10)])
88
>>> sum([fib(i) for i in range(100)])
573147844013817084100
在你的循环中,你已经在第 3 个位置开始迭代,因为你设置了。所以将你的范围设置为 (n -2).
0:1
1 : 1
2 : 1
3 : 2
4 : 3
5 : 5
要得到斐波那契数列的和,使用zero作为第一个系列,你需要这样做:
def run_it(n):
N2 = 0
N1 = 0
N = 0
z = N
for i in range(n):
print(N,z)
N2 = N1
N1 = N
if N is 0: N = 1
else: N = N1 + N2
z = z + N
run_it(int(input('Number: ')))
要使用 one 作为序列的开始来计算总和,请将 N 的初始值从零更改为 1。
我有一个任务是编写一个程序,对前 100 个斐波那契数进行求和。我检查了 Python 中的输出和 QBasic 64 中的输出,它们并不相同。我也检查了不同的输入。
Input: 10
Output: 89
-----------
Input: 100
Output: 573147844013817084101
是否正确?
这是我的代码:
n = int(input())
print()
p = 0
d = 1
z = p + d
print(str(p) + ' + ' + str(d) + ' = ' + str(z))
for i in range(n - 2):
p = d
d = z
z = p + d
print(str(p) + ' + ' + str(d) + ' = ' + str(z))
print('Sum:', z)
编辑:再次编辑代码,现在检查。我刚在维基百科上找到。这取决于你从什么数字开始循环。因此,如果我使用 (0, 1, 1, 2, 3, 5, 8, 13, 21, 和 34) 作为前 10 个斐波那契数,总和将为 88,而不是 89。
前十位和前一百位斐波那契数之和分别为88和573147844013817084100:
>>> cache = {}
>>> def fib(n):
if n == 0: return 0
if n == 1: return 1
if not n in cache:
cache[n] = fib(n - 1) + fib(n - 2)
return cache[n]
>>> sum([fib(i) for i in range(10)])
88
>>> sum([fib(i) for i in range(100)])
573147844013817084100
在你的循环中,你已经在第 3 个位置开始迭代,因为你设置了。所以将你的范围设置为 (n -2).
0:1 1 : 1 2 : 1 3 : 2 4 : 3 5 : 5
要得到斐波那契数列的和,使用zero作为第一个系列,你需要这样做:
def run_it(n):
N2 = 0
N1 = 0
N = 0
z = N
for i in range(n):
print(N,z)
N2 = N1
N1 = N
if N is 0: N = 1
else: N = N1 + N2
z = z + N
run_it(int(input('Number: ')))
要使用 one 作为序列的开始来计算总和,请将 N 的初始值从零更改为 1。