python利用递归求斐波那契数列
斐波那契数列是一个非常经典的数列,在计算机科学中也有许多应用。这个数列是以0和1开始,后面的每一项都是前面两项的和。换句话说,每一项都是前两项的和。数列的前十项是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34
在计算斐波那契数列时,我们通常会使用递推公式,但是在本文中,我们将学习使用递归的方式计算斐波那契数列。
递归是一种在程序执行过程中调用自身的方法。它通常使程序更简洁,但在某些情况下可能也会导致运行效率的下降。在使用递归时,需要确保递归过程能够停止,否则就会出现无限循环的情况,使程序无法继续执行。
以下是使用递归计算斐波那契数列的代码:
def fibonacci(n):
if n <= 1:
return n
else:
return(fibonacci(n-1) + fibonacci(n-2))
在上面的代码中,我们定义了一个名为“fibonacci”的函数,它接受一个参数n,该参数表示我们要计算的斐波那契数列的项数。如果n小于或等于1,则函数返回n,否则,它将调用自身,并返回前两个项的和。
由于递归的特性,这个函数会一直调用自身,直到n的值小于或等于1。在这种情况下,我们可以确保程序不会无限循环。
菜鸟教程python如何用函数将长度不同的数列相加要使用该函数计算斐波那契数列的前10个数字,我们可以调用fibonacci(10)函数,如下所示:
print("斐波那契数列:")
for i in range(10):
print(fibonacci(i))
当我们运行上面的代码时,它将输出斐波那契数列的前10项。
上面的代码虽然简单易懂,但可能会在计算较大的斐波那契数列时变得非常慢。这是由于函数在计算每一项时都会调用自身两次,这意味着它会重复计算相同的值。在这种情况下,我们可以使用技巧来优化该算法。
一个常用的技巧是记忆化,这是一种将其中间结果存储在内存中的方法,以便以后能够直接使用这些结果。在这种情况下,我们可以创建一个列表,每当计算一个斐波那契数字时,我们都将其存储在该列表中。下面是一个记忆化版的斐波那契程序:
def fibonacci(n, cache=None):
if cache is None:
cache = {}
if n in cache:
return cache[n]
if n <= 1:
return n
else:
result = fibonacci(n-1, cache) + fibonacci(n-2, cache)
cache[n] = result
return result
在上面的代码中,我们将调用结果存储在一个名为cache的字典中。如果我们已经计算过第n个数字,则可以直接从cache中检索到该数字而不需要再次计算它。
为了启用记忆化功能,我们需要添加一个名为cache的可选参数。当用户不提供该参数时,
我们默认使用空字典。
现在我们可以使用该函数计算较大的斐波那契数列,而不用担心它的运行效率。例如,我们可以像这样计算第100个数字:
print(fibonacci(100))
总的来说,递归是一种非常有用的方法,它可以使程序更简洁,但有时也可能会导致运行效率的下降。在本文中,我们学习了如何使用递归计算斐波那契数列,并使用记忆化技术优化了该算法。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论