斐波那契数列(Python)

题目:编写一个程序,实现斐波那契数列

思路:
斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

在数学上,费波那契数列是以递归的方法来定义:

F0 = 0 (n=0)

F1 = 1 (n=1)

F(n) = F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)

方法一:递归法

什么是递归函数?
递归是指函数可以直接或间接调用自身的一种特殊形式。如果一个函数在函数体内部调用自身,那么这个函数就是递归函数。

递归函数的两个关键要素
(1)递归基:递归函数需要停止递归的条件。

(2)递推式:将规模较大的问题分解成规模更小的同种问题,通过不断缩小问题规模,最终缩减到递归基的情形。

递归函数的优缺点
递归函数具有以下优点:

(1)代码简洁,易于理解。

(2)实现的方法符合计算机科学最基本的思想——分治思想。

但是,递归函数也有缺点:

(1)会占用更多的内存空间。

(2)效率较低,与循环结构相比可能更慢。

#递归
num = int(input('请输入数字:'))
def fibonacci(n):
    if n == 0: return 0
    if n == 1 or n == 2:
        return 1
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)
print('第{}个斐波那契数:{}'.format(num, fibonacci(num)))


#减少尾调
def fibonacci(num, curr=0, next=1):
    if num == 0:
        return curr
    else:
        return fibonacci(num-1, next, curr+next)

尾递归是指递归函数在最后一步调用自身。尾递归优化是一种特殊的递归调用,其所占用的栈空间最多只有常数级别。Python并没有提供针对尾递归优化的机制,但是可以手动进行优化。

缓存技术是提高计算机程序性能的一种常见手段,Python中也可以使用缓存技术优化斐波那契数列的递归函数。通过字典将已经计算过的数列项进行缓存,下次调用读取缓存即可,极大地提高了函数的执行效率。

代码如下所示:

cache = {}

def fibonacci(num):
    if num in cache:
        return cache[num]
    elif num == 0:
        return 0
    elif num == 1:
        return 1
    else:
        result = fibonacci(num - 1) + fibonacci(num - 2)
        cache[num] = result
        return result
方法二:循环调用法
#for循环:
num = int(input('请输入数字:'))
def fibonacci(n):
    a, b = 1, 1
    for j in range(n - 1):			# ♻️
        a, b = b, a + b
    return a
print('第{}个斐波那契数:{}'.format(num, fibonacci(num)))

你可能感兴趣的:(计算机等级二级Python,python,开发语言,算法,人工智能,全国计算机等级考试)