Python函数的递归

来自CloudWiki
Cloud17讨论 | 贡献2018年2月17日 (六) 10:40的版本
跳转至: 导航搜索

递归的定义

  • 函数的递归调用是函数调用的一种特殊情况,函数调用自己,自己再调用自己,自己再调用自己,...,当某个条件得到满足的时候就不再调用了,然后再一层一层地返回直到该函数第一次调用的位置。
  • P5-3.png
  • P4-7.png
  • 例1:阶乘的计算
def factorial(num):
    if num == 0:
        return 1
    else:
        return num * factorial(num-1)
n = eval(input("请输入一个整数: "))
print(factorial(abs(int(n))))
  • 例2: 字符串反转
def reverse(s):
    if s == "":
        return s
    else:
        return reverse(s[1:]) + s[0]
str = input("请输入一个字符串: ")
print(reverse(str))
  • 问题解决:使用递归法对整数进行因数分解。
from random import randint

def factors(num, fac=[]):
    #每次都从2开始查找因数
    for i in range(2, int(num**0.5)+1):
        #找到一个因数
        if num%i == 0:
            fac.append(i)
            #对商继续分解,重复这个过程
            factors(num//i, fac)
            #注意,这个break非常重要
            break
    else:
        #不可分解了,自身也是个因数
        fac.append(num)
facs = []
n = randint(2, 10**8)
factors(n, facs)
result = '*'.join(map(str, facs))
if n==eval(result):
    print(n, '= '+result)

返回 Python函数和代码复用