对于递归函数的进一步理解。
递归的本质实际上在于发现某种规律,某种可以将整个算法简化为一个小的模型,然后先解决小模型的问题,接着一步步,一层层的进行运算从而解决一个复杂的大模型问题。
例如:一个累加函数的递归算法。
def fun(n):
return n + fun(n-1)
其实累加的原理就是上个数加上下一个数,仅此而已。那么不用n和n-1分别表示上一个数和下一个数呢?
我们只需要让n与n-1相互累加就可以了,赋值计算的事情交给计算机去做!
如果将递归算法写成一般的算法,将会很复杂。
def fun(n):
sum = 0
for i in range(n+1): #range的第一位数字是0
sum += i
return sum
关于汉诺塔算法的理解:
其实道理同上。对于三根柱子的汉诺塔,无论多少层,无非就是把除底层外,上面的所有层移动到其中一根柱子上。然后再将最后一层挪到另一根柱子上。最后在把其他层依次挪到最后一层上即可。