第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

尾遞歸是怎么一回事?

標(biāo)簽:
Java C

50%的算法问题都能通过递归来解决,倒不是说递归本身有多厉害,只是说明递归的思想让很多复杂的问题变得简单! 啥? 了解数据结构的人都知道, 树结构本身就是用递归定义的,所以解决树相关的问题会优先考虑递归

什么是尾递归?

众所周知, 递归会记录上一个函数的调用状态, 造成大量的资源占用, 为了尽量减少资源的占用, 有了为递归的玩法, 就是把递归操作放到 return 内, 由于return 是函数的最后一句, 所以, 就可以减少记录函数体的空间


https://img1.sycdn.imooc.com//5d31b17800015e5105890484.jpg

两种递归方式

普通递归写法

function recursion(num){
    new_num = num + 1
    if (num >= 20000){        return
    }    console.log("普通递归|第",new_num,"次调用")
    recursion(new_num)
}

recursion(1)

尾递归写法 (直接将函数调用return出去 )

// 尾递归function recursion2(num){
    new_num = num + 1
    if (num >= 20000){        return
    }    console.log("尾递归|第",new_num,"次调用")    return recursion2(new_num)
}
recursion2(1)

尾递归节约了递归过程中压栈的内存消耗, 但这种玩法并不能突破递归栈的限制(python约为1000次, Chrome js环境约为20000次), 函数recursionreturn 自身之后 并没有析构释放空间,
为了验证以上说法,这里用Python举一个例子(js的析构很难写, 还是python好用...)

https://img1.sycdn.imooc.com//5d31b17d0001c68905820481.jpg

析构时机


class Recursion(object):
    def __init__(self, num):        self.num = num
        print("对象obj",self.num, "建立")    def __del__(self):
        print("对象obj", self.num-1, "析构")    # 尾递归
    def add(self):
        print(">>尾递归|第",self.num,"次")        self.num += 1
        if (self.num>10):            return
        else:
            return Recursion(self.num).add()    # 正常递归
    def add2(self):
        print(">>正常递归|第",self.num,"次递归")        self.num += 1
        if (self.num>10):            return
        else:
            Recursion(self.num).add2()  

def main():    # 尾递归
    recu = Recursion(1)
    recu.add()    # 正常递归
    recu2 = Recursion(1)
    recu2.add2()if __name__ == '__main__':
    main()



作者:木子昭
链接:https://www.jianshu.com/p/136a4323cf96


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消