什么是递归Recursion?
〉 递归是一种解决问题的方法,其精髓是将问题分解为规模更小的相同问题,
持续分解,直到问题规模小到可以用非常简单直接的方式来解决。
〉 递归的问题分解方式非常独特,其算法方面的明显特征就是:在算法流程中
调用自身。
〉 递归为我们提供了一种对复杂问题的优雅解决方案,精妙的递归算法常会出
奇简单,令人赞叹。
递归“三定律”
〉 为了向阿西莫夫的“机器人三定律”致敬,递归算法也总结出“三定律”
1 ,递归算法必须有一个基本结束条件(最小规模问题的直接解决)
2 ,递归算法必须能改变状态向基本结束条件演进(减小问题规模)
3 ,递归算法必须调用自身(解决减小了规模的相同问题)
列表求和:
def sum_list(lst): if len(lst) == 1:#终止条件 return lst[0] return lst[0] + sum_list(lst[1:])#减小规模并调用自身 if __name__ == '__main__': lst = [1, 2, 3, 4, 5] print(sum_list(lst))
列表反转:
def reverse_str(str): if str == "": return str return reverse_str(str[1:]) + str[0]
回文词判断:
def check(str): if str == "" or len(str) == 1: return True return str[0] == str[len(str) - 1] and check(str[1:len(str) - 1])
进制转换:
def convertToStr(n, base): string = "0123456789ABCDEF" if n < base: return string[n] return convertToStr(n // base, base) + convertToStr(n % base, base)