跳至正文
View Categories

< 1 min read

阶乘的求解 #

  1. 递归函数的定义
  2. 递归问题的拆解
  3. 递归的出口

递归函数的定义 #

递归算法的第一步,我们首先明确递归函数的定义,根据求解阶乘的需要我们首先定义myfactorial(n)函数,该函数的功能就是返回n!的值。

def myfactorial(n):#myfactorial函数功能:返回n!,参数为n
	pass

递归的拆解 #

将求解的递归问题的规模拆解到能够十分容易被解决,在本例中我们很容易就可以想到,可以将求1*2*3……n的积,拆解成先求1~(n-1)的积再乘以n,即在数学上有myfactorial(n))=n*myfactorial(n-1)的等式成立,求1~n-1的积同样可以使用上述的方法进行拆解。程序表示如下:

def myfactorial(n):
	s= n*myfactorial(n-1)*n#递归函数地拆解
	return s

递归的出口 #

这里把递归函数的边界条件定义为n=0,也即是递归函数的出口。上述递归函数myfactorial(n)逐步拆解成myfactorial(0)时,返回值显然是1,可以将当n等于0,作为递归的出口(数学中0!=1,1!=1)

def myfactorial(n):
	if n==0:
		return 1 #递归的出口
	s= n*myfactorial(n-1)#递归的拆解
	return s

小结 #

  • 根据阶乘递归算法,理解递归算法的三要素
  • 掌握阶乘求解的递归算法
  • 习题 #

    1. 画出myfactorial(5)递归调用执行过程图
    2. 尝试将递归函数myfactorial(n)的出口改为n=2,并验证