|
10鱼币
大佬能说说每一步具体的运行还有那个值的变换吗,小白,搞不懂,求求了
最好注释一下单步执行奥,自己运行了一遍看那个单步执行 不太明白
- def end(x, a, c):
- if x == 1:
- print(' 这里是if:%s' % x, a, c)
- else:
- end(x-1, c, a)
- print('这里是else:%d %s %s' % (x, a, c))
- end(3, '1', '2')
复制代码
本帖最后由 干虾皮 于 2021-12-9 00:46 编辑
这个程序感觉设计的好巧妙,反正我是脑洞不够大,原来这就是递归函数,上学时候我一直搞不懂,现在也设计不出来,我说说我的理解
- def end(x, a, c):
- if x == 1:
- print(' 这里是if:%s' % x, a, c)
- else:
- end(x-1, c, a)
- print('这里是else:%d %s %s' % (x, a, c))
- end(3, '1', '2')
复制代码
程序的执行步骤
1.肯定最先执行end(3,'1','2'),这个等于调用end函数,并且给了实参的初始值,并向上寻找函数end
2.往上可以找到end(x,a,c)函数定义并进入函数把x=3,a=‘1’,c=‘2’,也就是把实参的值赋给形参
3.第一轮判断 if x == 1:不符合,不会执行print(' 这里是if:%s' % x, a, c) ,要执行else语句 end(x-1, c, a),那就是形参变成了(2,'2','1')并且再次调用end函数,也就是end函数的第二轮判断,当然第一轮判断后面的 print('这里是else:%d %s %s' % (x, a, c))是满足的但是时序问题现在不会执行
4.第二轮判断 if x == 1:不符合,不会执行print(' 这里是if:%s' % x, a, c) ,要执行else语句 end(x-1, c, a),那就是形参变成了(1,1,'2'),同时该轮判断的判断后面的 print('这里是else:%d %s %s' % (x, a, c))是满足的但是时序问题现在不会执行,要再次调用end函数,也就是end函数的第三轮判断,
5.第三轮判断,if x == 1:符合,执行print(' 这里是if:%s' % x, a, c)也就是打印(x,a,c)(1,'1','2')这是最先打印出来的结果,第三轮判断的else条件不符合不会执行
6.打印第二轮判断判断后面的 print('这里是else:%d %s %s' % (x, a, c)),第二轮判断时候(x==2,a=='2',c=='1')
7.最后打印第一轮判断判断后面的 print('这里是else:%d %s %s' % (x, a, c)) (x==3,a=='1',c=='2')
这个很拗口,我不一定说的清楚了,你可以追问
@人造人,大佬您的调试器感觉好神奇,叫啥名字呀,我也想去下载一个
|
最佳答案
查看完整内容
这个程序感觉设计的好巧妙,反正我是脑洞不够大,原来这就是递归函数,上学时候我一直搞不懂,现在也设计不出来,我说说我的理解
程序的执行步骤
1.肯定最先执行end(3,'1','2'),这个等于调用end函数,并且给了实参的初始值,并向上寻找函数end
2.往上可以找到end(x,a,c)函数定义并进入函数把x=3,a=‘1’,c=‘2’,也就是把实参的值赋给形参
3.第一轮判断 if x == 1:不符合,不会执行print(' 这里是if:%s' % x, a, c ...
|