Leetcode部分递归相关练习
一、递归
1. 递归的定义
递归就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。
递归常与分治思想同时使用,能产生许多高效的算法。递归常用来解决结构相似的问题。所谓结构相似,是指构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决。具体地,整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法;第二部分与原问题相似,但比原问题的规模小,并且依赖第一部分的结果。
实际上,递归是把一个不能或不好解决的大问题转化成一个或几个小问题,再把这些小问题进一步分解成更小的小问题,直至每个小问题都可以直接解决。因此,递归有两个基本要素:
(1) 边界条件:确定递归到何时终止,也称为递归出口。
(2) 递归模式:大问题是如何分解为小问题的,也称为递归体。
递归函数只有具备了这两个要素,才能在有限次计算后得出结果。
2. 递归的实现
2.1 斐波那契数列求值
def fib(n):
if n==0 or n==1:
return n
return fib(n-1)+fib(n-2)
2.2 编程实现求阶乘 n!
def Factorial(n):
if n<=1:
return 1
return n*Factorial(n-1)
Factorial(5)
2.3 编程实现一组数据集合的全排列
# 可用包 【自带的库itertools.permutations】获取子集的全排列