递归函数powRecurse为何仅用base参与乘法?参数匹配解析
递归函数powRecurse的执行逻辑解析
疑问点
在递归函数powRecurse中,程序如何确定仅将base与递归调用中的base相乘,而非与power相乘?是否因为base是递归调用的第一个参数?我知道该函数可正常运行,但原以为调用powRecurse(2,4)时,会执行2 * (2,4),在第一次迭代中返回4和8。
函数代码
function powRecurse(base, power) { if(power === 0) return 1 if(power === 1) return base return base * powRecurse(base, power - 1) }
解答
首先明确:和base是不是递归调用的第一个参数完全无关,核心是你误解了递归调用的执行逻辑——递归调用会返回一个具体的计算结果,而不是直接把参数暴露出来参与运算。咱们拆解powRecurse(2,4)的完整执行流程就清楚了:
- 第一次调用
powRecurse(2,4):power既不是0也不是1,执行return 2 * powRecurse(2, 3),此时会先去执行powRecurse(2,3),等它返回结果后再做乘法 - 进入
powRecurse(2,3):同样不满足终止条件,执行return 2 * powRecurse(2, 2),继续调用下一层递归 - 进入
powRecurse(2,2):执行return 2 * powRecurse(2, 1),继续递归 - 进入
powRecurse(2,1):触发终止条件power === 1,直接返回base的值2 - 开始回溯计算返回值:
powRecurse(2,2)拿到下层返回的2,计算2 * 2 = 4并返回powRecurse(2,3)拿到下层返回的4,计算2 * 4 = 8并返回powRecurse(2,4)拿到下层返回的8,计算2 * 8 = 16并返回最终结果
你之前误以为会执行2 * (2,4)是搞错了函数调用的本质:powRecurse(base, power-1)是一个完整的函数调用,它会先执行完整个递归流程,最终返回一个数值,当前层的base只需要和这个数值相乘。代码里明确写了return base * powRecurse(...),从始至终都没有让base和power做乘法的逻辑,自然不会出现你担心的情况。
内容的提问来源于stack exchange,提问作者RamaSaga
相关产品推荐
相关产品推荐

