我这样理解递归的执行有问题么,大佬指点一下,谢谢

yang20181024 · · 1046 次点击
你可以理解为将func进栈,然后根据退出条件一个一个将栈里的func弹出 ``` 压栈: func(3) func(2) func(1) func(0) ```
#5
更多评论
/* #. func main() { #. Test12(3) #. } #. #. #. func Test12(a int) { #. if a == 0 { #. return #. } #. a-- #. Test12(a) #. fmt.Println(a) #. } main()中调用Test12()函数,并传入参数3,Test12()函数加载进内存,递归开始 【此时内存中存在本次调用产生的局部变量a = 3】 1. a = 3 判断3不等于0,跳过if语句中体代码 2. a-- 此时a等于2,继续往下执行 【此时内存中存在本次调用产生的局部变量a = 2】 3. 调用函数本身,再次在内存中加载Test12()函数 4. 判断 a = 2 不等于0,条件不满足,跳过if语句中代码 5. a-- 此时a等于1,继续往下执行 【此时内存中存在本次调用产生的局部变量a = 1】 6. 调用函数本身,再次在内存中加载Test12()函数 7. 判断 a = 1 不等于0,条件不满足,跳过if语句中代码 8. a-- 此时a等于0,继续往下执行 【此时内存中存在本次调用产生的局部变量a = 0】 9. 判断 a = 0 满足条件,执行if语句中代码 10. return 返回到函数的调用处Test12(a),向下继续执行代码 11. 然后执行fmt.Println(a),函数全部执行结束,在内存中消失【此处打印的是局部变量 a = 0】 12. 因为前面Test12()还函数加载了三次,会按照进内存的顺序,由后往前依次执行等待的代码,然后出内存 */
#1
faceNL
公众号: 面向奶酪
老哥,代码高亮么?
#2