大佬说说那个运行步骤
大佬能说说每一步具体的运行还有那个值的变换吗,小白,搞不懂,求求了{:10_254:}最好注释一下单步执行奥,自己运行了一遍看那个单步执行 不太明白{:10_254:}
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')
这个很拗口,我不一定说的清楚了,你可以追问
@人造人,大佬您的调试器感觉好神奇,叫啥名字呀,我也想去下载一个 你把程序载入调试器,单步执行不就可以了
学编程的不会调试程序怎么能行?
不行就画图,一边单步执行,一边画图
标记出当前在哪一层,输出是在哪一层,返回后回到哪一层 干虾皮 发表于 2021-12-9 00:21
这个程序感觉设计的好巧妙,反正我是脑洞不够大,原来这就是递归函数,上学时候我一直搞不懂,现在也设计不 ...
ipdb
干虾皮 发表于 2021-12-9 00:21
这个程序感觉设计的好巧妙,反正我是脑洞不够大,原来这就是递归函数,上学时候我一直搞不懂,现在也设计不 ...
$ pacman -Qo /bin/ipdb
/usr/bin/ipdb is owned by python-ipdb 0.13.9-1 本帖最后由 Stubborn 于 2021-12-9 14:50 编辑
人造人 发表于 2021-12-9 13:38
膜拜大佬{:5_95:},顺便回答题主,遇到函数往里面钻,等函数回结果,一层一层往回退 人造人 发表于 2021-12-8 23:24
你把程序载入调试器,单步执行不就可以了
学编程的不会调试程序怎么能行?
大佬收下我的膝盖{:10_254:}谢谢谢谢 Stubborn 发表于 2021-12-9 14:49
膜拜大佬,顺便回答题主,遇到函数往里面钻,等函数回结果,一层一层往回退
我尽量推{:10_250:} 感谢人造人,我也去下载一个ipdb 干虾皮 发表于 2021-12-10 00:21
感谢人造人,我也去下载一个ipdb
好厉害的样子{:10_254:}
页:
[1]