本帖最后由 micolar 于 2019-8-24 08:06 编辑
假如m == 5
你那程序执行到
m = max(m)
它就跳到max(5)函数
它过程中还要调用别的函数 也就是max(m-1) max(4)
执行max(4)函数 注意max(5) 跟 max(4) 是两个函数 不属于同个函数 它们都有各自的返回值 max(5)返回 15 max(4)返回10
依次类推
max(3)
max(2)
max(1) 这个函数因为参数等于1 它直接返回1 不再调用其它函数 然后把返回值1交给函数max(2) ,max(1)函数结束
max(2) = 2 +1 把返回值3交给max(3) max(2)函数结束 依次类推
max(3) = 3+3
max(4) = 4 + 6
max(5)= 5 + 10 这个时候max(5)结束 才执行下满printf("%d",m);语句
因为m = max(5) 所以m的结果是15 max(1)的值是给max(2)用的
还要 你上面的x是局部变量 仅在本函数有效 简单说 max(m) 跟 max(m-1) 函数中的x是两个不同的x
我理解的是 return 100 + 100-1 = 100 + 99 =199 啊,那么第二次函数调用自己本身不是 199 + 199-1了?
return 100 + max(100-1) 不是 return 100 + 100-1 = 100 + 99 =199
严格来说它不是调用自身 他们都有各自的栈 也就是内存
当然你也可以理解调用自身