使用 Python 的斐波那契数列
Fibonacci Sequence using Python
你好,我正在尝试编写一个脚本,提示用户输入一个整数 (n),然后按该顺序打印所有小于或等于输入的斐波那契数。
示例:
输入一个数字:14
输出为:1 1 2 3 5 8 13
这是我目前的方法,但不确定这是否是最有效的方法?它工作正常,但我想知道是否有更简单的方法来清理它..
n = int(input("Enter a number: "))
a = 0
b = 1
sum = 0
while(sum <= n):
print(sum, end = " ")
count += 1
a = b
b = sum
sum = a + b
print(end = " ")
我是 python 的新手,正在做一些练习,但无法在教科书中找到解决方案。
是这样的吗?
n = int(input("Enter a number: "))
fib = [0, 1]
while fib[-1] + fib[-2] <= n:
fib.append(fib[-1] + fib[-2])
print(fib)
这取决于您所说的“最有效方式”是什么意思。
Fibonacci 是一个相当典型的编码练习,大部分时间用于解释递归。例如,参见 this answer。
这种方式足够高效,但您的代码可以做得更好
n = int(input("Enter a number: "))
a = b = 1
while(b <= n):
print(b, end = " ")
a, b = b, a + b
我不太喜欢上面的方法,因为数字序列是 无限 而 内存分配 不是。因此,为了有效地获得尽可能多的可计算数字(当然是通过您的计算机),应该明确地使用 generators.
ITERATIONS = 100
def fibo():
a, b = 0, 1
while True:
a, b = b, a + b
yield b
f = fibo()
for _ in range(ITERATIONS):
print(next(f))
! 但请记住,如果您尝试 list(f)
之类的操作,您的计算机将 100% 崩溃数字序列是无限的,而您的计算机电源和存储空间不是。
祝你好运。
感谢tboschi。他的代码帮我解决了这个问题。
# fibonacci_list = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, ...]
fibonacci_list = [0, 1]
for value in fibonacci_list:
if value < 1000000:
new_value = fibonacci_list[-1] + fibonacci_list[-2]
fibonacci_list.append(new_value)
def fibonacci(n):
# Type your code here.
if n >= 0:
for index_num in range(len(fibonacci_list)):
if n == index_num:
return fibonacci_list[index_num]
else:
return -1
if __name__ == '__main__':
start_num = int(input())
print('fibonacci({}) is {}'.format(start_num, fibonacci(start_num)))
你好,我正在尝试编写一个脚本,提示用户输入一个整数 (n),然后按该顺序打印所有小于或等于输入的斐波那契数。 示例:
输入一个数字:14
输出为:1 1 2 3 5 8 13
这是我目前的方法,但不确定这是否是最有效的方法?它工作正常,但我想知道是否有更简单的方法来清理它..
n = int(input("Enter a number: "))
a = 0
b = 1
sum = 0
while(sum <= n):
print(sum, end = " ")
count += 1
a = b
b = sum
sum = a + b
print(end = " ")
我是 python 的新手,正在做一些练习,但无法在教科书中找到解决方案。
是这样的吗?
n = int(input("Enter a number: "))
fib = [0, 1]
while fib[-1] + fib[-2] <= n:
fib.append(fib[-1] + fib[-2])
print(fib)
这取决于您所说的“最有效方式”是什么意思。 Fibonacci 是一个相当典型的编码练习,大部分时间用于解释递归。例如,参见 this answer。
这种方式足够高效,但您的代码可以做得更好
n = int(input("Enter a number: "))
a = b = 1
while(b <= n):
print(b, end = " ")
a, b = b, a + b
我不太喜欢上面的方法,因为数字序列是 无限 而 内存分配 不是。因此,为了有效地获得尽可能多的可计算数字(当然是通过您的计算机),应该明确地使用 generators.
ITERATIONS = 100
def fibo():
a, b = 0, 1
while True:
a, b = b, a + b
yield b
f = fibo()
for _ in range(ITERATIONS):
print(next(f))
! 但请记住,如果您尝试 list(f)
之类的操作,您的计算机将 100% 崩溃数字序列是无限的,而您的计算机电源和存储空间不是。
祝你好运。
感谢tboschi。他的代码帮我解决了这个问题。
# fibonacci_list = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, ...]
fibonacci_list = [0, 1]
for value in fibonacci_list:
if value < 1000000:
new_value = fibonacci_list[-1] + fibonacci_list[-2]
fibonacci_list.append(new_value)
def fibonacci(n):
# Type your code here.
if n >= 0:
for index_num in range(len(fibonacci_list)):
if n == index_num:
return fibonacci_list[index_num]
else:
return -1
if __name__ == '__main__':
start_num = int(input())
print('fibonacci({}) is {}'.format(start_num, fibonacci(start_num)))