再理解递归函数

递归函数

标签(空格分隔): 重新理解一遍递归


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

  首先,使用递归函数需要防止栈溢出。因为在计算机中函数的调用是通过这种数据结构实现的,每当进入一重函数调用,栈就会加一层栈帧,每当函数返回一层,栈就会减少一层栈帧,所以递归调用太多次数的话,会出现栈溢出的情况。


  归调用栈溢出的方法:尾递归优化。即在函数返回时,调用自身,而return语句不能包含表达式,这样的话无论递归调用本身多少次,都只占用一个栈帧,不会出现栈溢出的情况。

def fact(n):
    return fact_iter(n, 1)
    
def fact_iter(num, product):
    if  num == 1:
        return product
    return fact_iter(num - 1, num * product)

讲真的,我没有搞明白怎么优化了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 你喜欢吃树上刚摘的新鲜苹果 还是被人嚼碎喂到嘴里的苹果 1. 今天早上刚下公交车,原本的大晴天忽然就哗啦下起了大雨...
    猫和阳光阅读 5,514评论 4 9
  • 经过近一个月的准备,我们终于乘着西去的✈️,开始醉美青海十日游 巍巍昆仑山,茫茫戈壁滩,观玉珠峰雪山,...
    曹桂芳11阅读 3,655评论 0 0
  • 他呢,会想起我吗?
    鹤小姐阅读 1,670评论 2 0
  • 白天的阳光及屋檐上,晒着,笋子脆弱的身子。 黑夜的月亮和油灯下,爬着,钢铁坚硬的灵魂。 笋子的脆弱养活了我,却被,...
    瑜伽散人阅读 1,046评论 9 13
  • 年迈的铁轨两边是漫天遍地金黄色的麦田,绿皮火车慢慢悠悠,一路向前发出叮叮当当的响声。我就坐在第十二节车厢第七排西边...
    谱鲸阅读 968评论 0 0