dbg模式下观测到,18行跳到21行,a的数值不一样,这是怎么原理?
新手不解,求骂求指导!
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
压根不是一个a啊,aaa的参数a是上一层函数的a-1
为什么当a==1的时候,要跳到上一层的a值呢?
#1楼 @GreatMercy 为什么当a==1的时候,要跳到上一层的a值呢?
当a=2时,b= aaa(a-1),此时a=2没问题吧?不管aaa里面发生什么,不会改变a的值 2。
b= aaa(a-1)
在这个aaa函数中,传入的参数时a-1=1,对该函数中的变量a,a == 1成立,return 1,所以b= aaa(a-1)得到的是b = 1,a的值没变 是2。
a == 1
return 1
b = 1
所以 不存在a的值变了,因为两个函数中的a压根就不是同一个,你换个参数意思也一样
a = 2 b = aaa(a-1) func aaa(b int) int{ if b == 1{ return 1 } }
这是值传递,函数内部新生成了一个a,不是一个作用域,你要传引用,
递归传引用,我估计更难理清思路了。更乱了。时空错乱的感觉。
`单行代码`
压根不是一个a啊,aaa的参数a是上一层函数的a-1
为什么当a==1的时候,要跳到上一层的a值呢?
当a=2时,
b= aaa(a-1)
,此时a=2没问题吧?不管aaa里面发生什么,不会改变a的值 2。在这个aaa函数中,传入的参数时a-1=1,对该函数中的变量a,
a == 1
成立,return 1
,所以b= aaa(a-1)
得到的是b = 1
,a的值没变 是2。所以 不存在a的值变了,因为两个函数中的a压根就不是同一个,你换个参数意思也一样
这是值传递,函数内部新生成了一个a,不是一个作用域,你要传引用,
递归传引用,我估计更难理清思路了。更乱了。时空错乱的感觉。