栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

有没有一段时间您不使用递归?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

有没有一段时间您不使用递归?

是的,很多时候我不会使用递归。递归 不是
免费的,它在堆栈空间上有成本,并且与其他资源相比,资源通常更为有限。设置和拆卸堆栈框架也要花费时间,无论多么小。

举例来说,倍受吹捧的阶乘函数就是我可能会选择一种迭代方法的函数,该函数的数目很大。计算10000!与:

def factorial (n):    if n = 1 return 1    return n * factorial (n-1)

将使用10,000个堆栈帧(假设编译器没有将其优化为迭代解决方案,当然)。迭代解决方案:

def factorial (n)    r = 1    while n > 1:        r = r * n        n = n - 1    return r

将只使用一个堆栈框架,而很少使用其他框架。

的确,递归解决方案通常是更优雅的代码,但是您必须在环境的限制下加以调整。

您的

carbon
示例是我实际上将使用递归的示例,因为:

  • 它最多使用六个堆栈帧(字符串中每个字符一个);和
  • 它相对优雅,至少比六个嵌套循环和庞大的相等性检查要多得多。

例如,以下Python代码可以解决问题:

def recur (str, pref = ""):    # Terminating condition.    if str == "":        print pref        return    # Rotate string so all letters get a chance to be first.    for i in range (len (str)):        recur (str[1:], pref + str[:1])        str = str[1:] + str[:1]recur ("abc")

生产:

abcacbbcabaccabcba

当然,如果您的字符串可以是10K长,我会重新考虑一下,因为这将涉及更多的堆栈级别,但是,如果保持足够低,则递归是一个可行的解决方案。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/469959.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号