递归
来源:互联网 发布:网络金融运营模式 编辑:程序博客网 时间:2024/05/20 09:43
递归只是让你解决方案更加清晰,并没有性能上的优势。实际上,在有些情况下,使用循环的性能更好。正如,在Stack Overflow 上,Leigh Caldwell 说了一句话:“如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易理解。如何选择要看什么对你来说更重要。”
递归函数包括两个部分:
边界条件:函数不再调用自己,从而避免形成无限循环。
递归条件:函数调用自己
调用栈的定义:存储多个函数的变量,与栈存储的值有点不同
递归地调用栈示例代码如下:
#coding: utf-8def fact(x): if x == 1: return 1 else: return x * fact(x-1)print fact(5) #其中,调用栈将存储 fact(5),fact(4),fact(3),fact(2),fact(1)
使用循环示例代码如下:
#coding: utf-8def fact(x): s = 1 while x: s = s * x x = x - 1 return s
小结:
使用栈虽然很方便,但是也要付出代价,存储详尽的信息(fact(x)函数名称及变量和值)可能占用大量的内存。每个函数调用都要占用一定的内存,如果栈很高,就意味着计算机存储了大量函数调用的信息。在这种情况下,你有两种选择:
- 重新编写代码,转而使用循环。
- 使用尾递归。这是一个高级递归主题。并非所有的语言都支持递归。
0 0