递归调用【乡村培育站暑期学习】
递归的概念:在定义一个函数或过程时,如果出现调用自身的成分,则称为递归。
递归的核心思想:先把规模较大的问题编程规模较小的问题,再把规模较小的问题又变成规模更小的问题…当问题小到一定程度的时候,可以直接得出它的解,从而得到原来问题的解,即采用“大事化小,小事化了”的基本思想。
递归算法的实现要点(条件):1.递归算法有明确的结束递归的边界条件(又称终止条件)以及结束时的边界值,可以通过条件语句(if语句)实现。2.函数在它的函数体内调用自身,并向着递归的边界条件发展。【简化记忆:结束条件和自己调用自己】
范例一:用递归函数求一个数的阶乘。
1 #coding:utf-8
2 def factorial(n):
3 if n==1:
4 return 1 #边界条件(结束条件)
5 else:
6 return n * factorial(n-1) #调用自身
7 def main():
8 print("5的阶乘:",factorial(5))
9 if __name__ == "__main__": #判定程序执行名称
10 main()
执行结果:120
范例二:用递归函数实现累加和。
1 #coding:utf-8
2 def sum_m(n):
3 if n == 1:
4 return 1 #边界条件
5 else:
6 return n + sum_m(n-1) #自己调用自己
7 def main():
8 print("1+2+3+4+5=", sum_m(5))
9 if __name__ == "__main__":
10 main()
执行结果:15
范例三:用辗转相除的方法两个数的最大公因数。
1 #coding:utf-8
2 def main():
3 m = 18
4 n = 24
5 if m < n:
6 n, m = m, n # m和n变量值互换
7 while (m % n != 0):
8 t = m % n
9 m = n
10 n = t
11 print("18和24的最大公因数:", n)
12 if __name__ == "__main__":
13 main()
执行结果:6
范例四:用递归函数实现求两个数的最大公因数(greatest common divisor )。
1 #coding:utf-8
2 def gcd_m(m, n):
3 if m < n:
4 n, m = m, n
5 if m % n == 0:
6 return n
7 else:
8 t = m % n
9 m = n
10 n = t
11 return gcd_m(m, n)
12 def main():
13 print("8和12的最大公因数:", gcd_m(18, 24))
14 if __name__ == "__main__":
15 main()
执行结果:6