为了账号安全,请及时绑定邮箱和手机立即绑定

麻烦帮忙列出下列函数 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 关注
  • 61 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信