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

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

麻煩幫忙列出下列函數 foo(2,7)的遞歸調用過程

麻煩幫忙列出下列函數 foo(2,7)的遞歸調用過程

C++
交互式愛情 2023-01-03 08:04:36
void foo(int m, int n) { if(n = =0) return 1; if(n%2 = =1) return (foo(m*m,n/2)*m);return (foo(m*m,n/2));}
查看完整描述

2 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

首先第1層,m=2 n=7 n%2 = =1成立執行foo(m*m,n/2)*m也就是foo(4, 3)*2
第2層,m=4 n=3 n%2 = =1成立執行foo(m*m,n/2)*m也就是foo(16, 1)*4
第3層,m=16 n=1 n%2 = =1成立執行foo(m*m,n/2)*m也就是foo(256, 0)*16
第4層,m=256 n=0 n = =0成立執行返回1
回到第3層,計算1*16,返回16
回到第2層,計算16*4,返回64
回到第1層,計算64*2,返回128

最終結果就是128

不過你的foo返回值寫錯了,不是void,應該是int

查看完整回答
反對 回復 2023-01-06
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

n = =0是這個遞歸函數的出口

遞歸就相當于進棧出棧的過程,先進后出
f(2, 7) = f(4, 3) * 2 = (f(16, 1) *4 ) * 2 = ( (f(256, 0) * 16)*4)*2 = 1*16*4*2 = 128

棧結構如下
1
f(256, 0) * 16
f(16, 1) *4 
f(4, 3) * 2
f(2, 7)

查看完整回答
反對 回復 2023-01-06
  • 2 回答
  • 0 關注
  • 111 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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