递归函数
递归的特性
递归(recursion)是一种函数的调用方式,简而言之就是自己调用自己。
递归可以将一个大规模的问题分解成更小的相同问题,经过持续分解到最后问题规模小到可以用非常简单直接的方式来解决,或者将一个问题拆分成不同的各个部分,达到分而解决分而治之的目的。
一个递归函数必须要满足3要素:
- 必须有一个基本结束条件
- 必须能改变问题规模
- 必须调用自身
如下所示,这就是一个标准的递归函数:
def function(count):
if count:
print(count)
function(count=count - 1)
return
function(5)
# 5
# 4
# 3
# 2
# 1
回溯与递推
函数递归必然经历2个阶段,一个是回溯阶段,一个是递推阶段:
- 回溯:函数不断递归调用自身时的阶段被称为回溯阶段
- 递推:当函数退出递归调用时的阶段被称为递推阶段
下面是一个问姓名的问题,可以非常直白的阐述回溯和递推的2个概念。
首先,你问A多少岁,A会回答你他比B大10岁,然后你又问B多少岁,B会回答你它比C大10岁…
这样直至E,E说他的年龄是18岁,最后问A多少岁?