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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

C ++中的尾遞歸

C ++中的尾遞歸

C++
ibeautiful 2019-11-29 10:14:29
有人可以給我展示一個(gè)簡(jiǎn)單的C ++尾遞歸函數(shù)嗎?為什么尾部遞歸更好甚至更好?除尾遞歸外,還有哪些其他遞歸?
查看完整描述

3 回答

?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超2個(gè)贊

C ++中的尾部注釋看起來(lái)與C或任何其他語(yǔ)言相同。


void countdown( int count ) {

    if ( count ) return countdown( count - 1 );

}

尾遞歸(通常是尾調(diào)用)要求在執(zhí)行尾調(diào)用之前清除調(diào)用者的堆棧幀。對(duì)程序員而言,尾遞歸類似于循環(huán),return簡(jiǎn)化為goto first_line;。但是,編譯器需要檢測(cè)您在做什么,如果沒(méi)有,則仍然會(huì)有一個(gè)額外的堆棧幀。大多數(shù)編譯器都支持它,但是編寫循環(huán)或goto通常更容易且風(fēng)險(xiǎn)更低。


非遞歸尾調(diào)用可以啟用隨機(jī)分支(類似于goto其他函數(shù)的第一行),這是一種更為獨(dú)特的功能。


請(qǐng)注意,在C ++中,return語(yǔ)句范圍內(nèi)不能有任何帶有非平凡析構(gòu)函數(shù)的對(duì)象。功能結(jié)束清理將要求被呼叫者返回到呼叫者,從而消除尾叫。


還要注意(以任何語(yǔ)言),尾部遞歸要求算法的整個(gè)狀態(tài)在每一步都通過(guò)函數(shù)參數(shù)列表傳遞。(從下一個(gè)調(diào)用開(kāi)始之前就必須消除函數(shù)的堆??蚣艿囊笾锌梢郧宄乜闯鲞@一點(diǎn)……您不能將任何數(shù)據(jù)保存在局部變量中。)此外,在函數(shù)的返回值返回尾部之前,不能對(duì)其進(jìn)行任何操作。


int factorial( int n, int acc = 1 ) {

    if ( n == 0 ) return acc;

    else return factorial( n-1, acc * n );

}


查看完整回答
反對(duì) 回復(fù) 2019-11-29
  • 3 回答
  • 0 關(guān)注
  • 547 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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