Python | 递归

本文介绍了递归的概念,通过Fibonacci序列、阶乘、斐波那契数列等经典例子详细阐述了递归的定义和应用。还展示了如何在Python中实现递归函数,包括计算序列和、阶乘、逆序数以及判断日期等功能。递归虽然强大,但也需要注意其可能导致的效率问题。
摘要由CSDN通过智能技术生成

说起递归,我觉得其实大部分人应该是不陌生的,递归广泛存在于生活中。
比如:

Advertisement for Droste cocoa, c. 1900

The woman in this image holds an object that contains a smaller image of her holding an identical object, which in turn contains a smaller image of herself holding an identical object, and so forth.[from wikipedia]

那么递归的定义是什么呢?
在数学和计算机科学中,我们给出一个比较传统的定义是:
它们有两个特性。
1. 一个基本特例,也称作平凡(一般)情况,它是递归终止的情形
2. 一个已定义好的规则来使其它非基本的情形转化为基本情形

可能这个上面的定义比较枯燥,那么我们用一个经典的例子来说明一下。

Fibonacci sequence

Fib(0) = 0, 是一个基本情况
Fib(o) = 1, 是第二个基本情况
所以 Fibonacci sequence 总共有两个基本情形
对于其它情形,我们定义 Fib(n) = Fib(n-1) + Fib(n-2)

到这里,估计读者已经对递归有一个大概的印象了,那么在Python中我们怎么用递归来实现某些特定的功能呢?

我首先用一些简单的例子来进行说明。

例1.

假如你要求序列数列 1, 2, 3, 4, …, n 的和。比如对于n=4, 其和是10。那假如我们用递归来描述这种情况呢?
定义:
1. 基本情况:S(1) = 1
2. 其它情形: S(n) = S(n-1) + n
所以在上述求和中S(n)的定义又用到了自己本身的定义,这就构成了递归。
我们用Python来实现以下上面的思路。


def Sum(n):
    if n==1:
    #对应基本情形
        return 1
    return Sum(n-1) + n#对应递归情形

>>> Sum(4)
10
>>> Sum(10)
55
>>> Sum(100)
5050

代码如上,可以看到,问题如果用递归来解决的话,可以与现实很好的结合,因为现实中有很多问题也是递归定义的。
此外

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值