亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C ++中的尾遞歸

C ++中的尾遞歸

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

3 回答

?
DIEA

TA貢獻1820條經驗 獲得超2個贊

C ++中的尾部注釋看起來與C或任何其他語言相同。


void countdown( int count ) {

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

}

尾遞歸(通常是尾調用)要求在執行尾調用之前清除調用者的堆棧幀。對程序員而言,尾遞歸類似于循環,return簡化為goto first_line;。但是,編譯器需要檢測您在做什么,如果沒有,則仍然會有一個額外的堆棧幀。大多數編譯器都支持它,但是編寫循環或goto通常更容易且風險更低。


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


請注意,在C ++中,return語句范圍內不能有任何帶有非平凡析構函數的對象。功能結束清理將要求被呼叫者返回到呼叫者,從而消除尾叫。


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


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

    if ( n == 0 ) return acc;

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

}


查看完整回答
反對 回復 2019-11-29
  • 3 回答
  • 0 關注
  • 550 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號