递归

来源:互联网 发布:网络金融运营模式 编辑:程序博客网 时间: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)函数名称及变量和值)可能占用大量的内存。每个函数调用都要占用一定的内存,如果栈很高,就意味着计算机存储了大量函数调用的信息。在这种情况下,你有两种选择:

  1. 重新编写代码,转而使用循环。
  2. 使用尾递归。这是一个高级递归主题。并非所有的语言都支持递归。
0 0
原创粉丝点击