Python进阶之路 7.5 递归

版权声明:本教程只限学习交流,不得用于商业用途。 https://blog.csdn.net/weixin_45086637/article/details/90814941

7.5 递归

递归对于初学者来说是一个难点,初学者可能需要花一些精力在这上面。其实单从编写递归的方式上来看并不难理解。所谓递归,就是在函数内部调用自身。在执行过程中,Python解析器会利用栈(stack)处理递归函数返回的数据。所以递归函数的一个必要条件是要有终止条件,否则栈就会溢出。在这里并不讨论递归的底层原理,只讨论如何编写递归函数。因为讨论递归的底层原理,会让初学者觉得更为复杂。所以在此不讨论这些底层的原理,感兴趣的可以去网上查一下资料。

通过递归可以实现很多经典的算法,如阶乘、斐波那契数列等。例7.7详细描述了如何使用递归函数实现阶乘和斐波那契数列。

[例 7.7] 本例将通过递归实现阶乘和斐波那契数列。

假如计算阶乘的函数是jc(n),其中n是整数型参数,该函数表示计算n的阶乘。如果要计算n的阶乘,从数学上描述有如下的公示。

n! = 1 X 2 X 3 X …Xn
上面的公示也可以按如下形式描述。
n! = n X (n -1)!
如果用jc函数描述,会有如下的表达式。
jc(n) = n * jc(n -1)

其实这就是一个典型的递归表达式。n!等于(n-1)!与n的乘积。而要计算(n-1)!,就需要计算(n-1)X(n-2)!。以此类推,计算1!,会有1!=1*(1-1)!=1*0!=1。由于0!等于1,所以0就是阶乘的终止条件,当然有时也可以将0和1都作为阶乘的终止条件。也就是说,在递归函数中,先要考虑终止条件,然后再进行递归调用。斐波那契数列与阶乘的思路类似,也需要考虑终止条件。而斐波那契数列的终止条件是n等于1或2时,因为,斐波那契数列需要从第3个值开始,才可以用前两个值的和作为当前值。而n等于1时,数列值是0,n等于2时,数列值是1。

# 计算阶乘的递归函数

def jc(n):

    # 终止添加
    if n == 0 or n == 1:
        return 1
    else:

        # 进行递归调用
        return n * jc(n - 1)

# 计算10的阶乘,输出结果:3628800
print(jc(10))



# 计算斐波那契数列的递归函数

def fibonacci(n):

    # 终止条件
    if n == 1:
        return 0

    # 终止条件
    elif n == 2:
        return 1
    else:
        # 进行递归调用
        return fibonacci(n - 1) + fibonacci(n - 2)

# 计算斐波那契数列的第10个值,输出结果:34
print(fibonacci(10))

输出结果:

3628800
34

上面这些对于初学者来说,也许很难看得懂,不过没关系。在这里不需要你去看懂是什么意思,只需要你去了解这个递归是什么意思就可以了,在以后高级编程中会经常用到递归。

猜你喜欢

转载自blog.csdn.net/weixin_45086637/article/details/90814941
7.5
今日推荐