【原创首发】跟着小灰学Python-递归算法

926 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

声明:版权归本人所有,违者必究。 
转载请注明来源 https://juejin.cn/post/7111941686779412494

1.1. 递归算法

1.1.1. 算法定义

递归算法在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。简单来说,递归就是在一个方法的方法体中调用自己。

1.1.2. 基本思想

递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法一般用于解决三类问题:

(1)问题的定义是按递归定义的(Fibonacci函数,阶乘)

(2)问题的解法是递归的(有些问题只能使用递归方法来解决,例如,汉诺塔问题)

(3)数据结构是递归的(链表、树等的操作,包括树的遍历,树的深度)

  设计一个递归的算法程序,需要认知递归三要素:

(1)将一个问题化简到更小的规模,类似于数学归纳法的步骤

(2)父问题与子问题不能有重叠的部分,通过子问题的解可以解决父问题

(3)确定递归终止的条件,比如树到达叶子节点,二分查找时left等于right

1.1.3. 代码实现--阶乘

问题描述:

求6的阶乘,即6!=65432*1。

算法分析:

正整数的阶乘(factorial)是所有小于及等于该数的正整数,并且0的阶乘为1。自然数n的阶乘写作n!。定义一个递归函数fact,在入参大于0,则在函数中递归调用自己。调用图如下:

image.png

代码实现:

【例1-1】 6的阶乘:

def fact(n):
    result = 1
    if n == 0:
        return 1
    else:
        result = n * fact(n-1)
    return result

if __name__ == '__main__':
    print(fact(6))

执行结果: 720