什么是递归
递归是一种解决问题的方法,将问题分解为更小的子问题,直到得到一个足够小的问题可以被很简单的解决。通常递归涉及函数调用自身。递归允许我们编写优雅的解决方案,解决可能很难编程的问题。
来看一个最简单的例子,求和。一个列表求和的话,常见写法是这样的:
def listsum(numlist): thesum = 0 for i in numlist: thesum = thesum + i return thesum l = [1,3,5,7,9,] print listsum(l)
这个写法其实就很简单了,就是个thesum作为累加器不断做加法的写法,来看看叠加是怎么样的。
def listsum1(numlist): if len(numlist) == 1: return numlist[0] else: return numlist[0] + listsum(numlist[1:]) print listsum1(l)
我的理解就是本来是一个列表相加,将列表相加分解为两两相加,然后不断分解。图例可以是这样的
再来看看这,将一个十进制整数转换为N进制的字符串。其实和叠加差不多,代码如下:
def toStr(n,base): """ :param n: 要转换的整数 :param base: 要转换的进制 :return: 返回一个 """ convertString = "0123456789ABCDEF" if n < base: return convertString[n] else: return toStr(n/base,base) + convertString[ n%base] print toStr(10,2)