鱼C论坛

 找回密码
 立即注册
查看: 878|回复: 10

[已解决]大佬说说那个运行步骤

[复制链接]
发表于 2021-12-8 22:54:34 | 显示全部楼层 |阅读模式
10鱼币
大佬能说说每一步具体的运行还有那个值的变换吗,小白,搞不懂,求求了
最好注释一下单步执行奥,自己运行了一遍看那个单步执行 不太明白


  1. def end(x, a, c):
  2.     if x == 1:
  3.         print('  这里是if:%s' % x, a, c)
  4.     else:        
  5.         end(x-1, c, a)
  6.         print('这里是else:%d %s %s' % (x, a, c))
  7. end(3, '1', '2')
复制代码
最佳答案
2021-12-8 22:54:35
本帖最后由 干虾皮 于 2021-12-9 00:46 编辑

这个程序感觉设计的好巧妙,反正我是脑洞不够大,原来这就是递归函数,上学时候我一直搞不懂,现在也设计不出来,我说说我的理解
  1. def end(x, a, c):
  2.     if x == 1:
  3.         print('  这里是if:%s' % x, a, c)
  4.     else:        
  5.         end(x-1, c, a)
  6.         print('这里是else:%d %s %s' % (x, a, c))
  7. 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 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-8 22:54:35 | 显示全部楼层    本楼为最佳答案   
本帖最后由 干虾皮 于 2021-12-9 00:46 编辑

这个程序感觉设计的好巧妙,反正我是脑洞不够大,原来这就是递归函数,上学时候我一直搞不懂,现在也设计不出来,我说说我的理解
  1. def end(x, a, c):
  2.     if x == 1:
  3.         print('  这里是if:%s' % x, a, c)
  4.     else:        
  5.         end(x-1, c, a)
  6.         print('这里是else:%d %s %s' % (x, a, c))
  7. 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')
这个很拗口,我不一定说的清楚了,你可以追问

@人造人,大佬您的调试器感觉好神奇,叫啥名字呀,我也想去下载一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-8 23:24:41 | 显示全部楼层
你把程序载入调试器,单步执行不就可以了
学编程的不会调试程序怎么能行?

Peek 2021-12-08 23-20.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-8 23:33:58 | 显示全部楼层
不行就画图,一边单步执行,一边画图
标记出当前在哪一层,输出是在哪一层,返回后回到哪一层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-9 13:36:24 | 显示全部楼层
干虾皮 发表于 2021-12-9 00:21
这个程序感觉设计的好巧妙,反正我是脑洞不够大,原来这就是递归函数,上学时候我一直搞不懂,现在也设计不 ...

ipdb
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-9 13:38:46 | 显示全部楼层
干虾皮 发表于 2021-12-9 00:21
这个程序感觉设计的好巧妙,反正我是脑洞不够大,原来这就是递归函数,上学时候我一直搞不懂,现在也设计不 ...
  1. $ pacman -Qo /bin/ipdb
  2. /usr/bin/ipdb is owned by python-ipdb 0.13.9-1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-9 14:49:40 | 显示全部楼层
本帖最后由 Stubborn 于 2021-12-9 14:50 编辑


膜拜大佬,  顺便回答题主,遇到函数往里面钻,等函数回结果,一层一层往回退
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-9 15:20:48 | 显示全部楼层
人造人 发表于 2021-12-8 23:24
你把程序载入调试器,单步执行不就可以了
学编程的不会调试程序怎么能行?

大佬收下我的膝盖谢谢谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-9 15:21:41 | 显示全部楼层
Stubborn 发表于 2021-12-9 14:49
膜拜大佬,  顺便回答题主,遇到函数往里面钻,等函数回结果,一层一层往回退

我尽量推
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-10 00:21:46 | 显示全部楼层
感谢人造人,我也去下载一个ipdb
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-10 14:23:08 | 显示全部楼层
干虾皮 发表于 2021-12-10 00:21
感谢人造人,我也去下载一个ipdb

好厉害的样子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 16:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表