鱼C论坛

 找回密码
 立即注册
查看: 2223|回复: 5

求助一个程序问题

[复制链接]
发表于 2019-10-28 19:21:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么
def f(n):

    if n>0:
        f(n//10)
        print(n%10)
        
        
        

f(1234567) 返回是 1234567

这样写 def f(n):

    if n>0:
        
        print(n%10)
        f(n//10)
        
        

f(1234567) 返回是 7654321
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-28 19:51:58 | 显示全部楼层
第一个程序中的递归调用里面还有其他的print函数,这些print函数是在递归体里面的,比print(7)先执行,顺序就是1234567
第二个程序的递归调用在print(7)后面,所以任何递归里的print都比print(7)执行更靠后
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-28 20:50:01 | 显示全部楼层
我感觉应该你思考的时候混乱了顺序
首先你要搞清楚:print(n%10)   是打印这个数个位上面的数字,比如1234,print(1234%10)就是打印出4
然后你需要清楚:n//10    是把这个数的个位给去掉, 比如1234, n//10就成了123
那么,你用的递归f(n//10)在print(n%10)前面的话,就会先进入递归,一直执行f(n//10),就1234而言,就f(123),f(12),f(1),再f(0),直到0的时候,判断不成立,里面的递归和打印都不执行,然后回到f(1),开始打印print(1%10),也就是1,回到f(12),打印print(12%10)也就是2,然后依次,就是1234

你要是换了顺序,在print,然后f(n//10),就比如1234,先把个位数4打印了,然后f(123),在里面把3打印了,直到0的时候判断不成立,中断递归
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-29 09:57:33 | 显示全部楼层
你可以用笔去写下每一次要打印的内容,通过你自己的大脑去运行这段代码,各种变量的值,记不住就写下来。
遇到函数就调用函数,函数没有结束但是自己调用了自己就记住那个位置,直到那次调用结束。
这样的话,也许你能自己搞懂咋回事。
你也可以去画程序框图,画出程序框图后,理解起来可能比纯代码更容易理解。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-29 13:23:16 | 显示全部楼层
阴阳神万物主 发表于 2019-10-29 09:57
你可以用笔去写下每一次要打印的内容,通过你自己的大脑去运行这段代码,各种变量的值,记不住就写下来。
...

好的,谢谢各位
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-29 18:46:28 | 显示全部楼层
可以去看下小甲鱼零基础学习Python课后作业第九讲水仙花数问题。看明白就好
>>>153%10
3
>>>153//10
15
利用取余来输出个位数字,利用地板除(float)来舍去最后一位,使十位变为个位,然后循环。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 06:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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