这是python3中的一个函数,它打印1到10.由于我是一个编程菜鸟,因此有一些我不了解的事情。
只要该数字大于1,此函数将从给定数字中减去1.因此,如果数字= 10,则将从10减去1得到9,然后从9减去1得到8,依此类推......直到它达到1,将被打印到屏幕上。
我不明白为什么函数随后打印2,3,4,5,6,7,8,9和10.因为这些数字高于1,所以不应该输入if -statement然后不打印?根据我对代码的理解,只会打印等于或小于1的数字。
换句话说:"为什么输出这个功能,而不是" 1" ?单独"
def print_numbers(number):
if number > 1:
print_numbers(number-1)
print(number)
print_numbers(10)
你可以试试python中的代码,看看输出是1到10吗?
答案 0 :(得分:0)
在这个块中:
string(i)
解释器在该条件下输入list(string) # ['H','e','l','l','o']
函数,但之后也会打印该数字。如果将print放在else分支中,则会产生预期的效果:
if number > 1:
print_numbers(number-1)
print(number)
答案 1 :(得分:0)
这是怎么回事:
呼叫功能:print_numbers(10)
呼叫功能:print_numbers(9)
等。等
在print_numbers(1)中没有调用下一个函数,所以
evetSourceAppChan
被跳过。现在调用print语句,您的程序将打印' 1'。
print_numbers(1)继续并打印1
print_numbers(2)继续并打印2
等等。
如果您之前要使用print语句,请执行以下操作:
eventsH sid = Tagged $ \req respond -> do
mCh <- lookupChannel env sid
case mCh of
Nothing -> do
let msg = "Could not find session with id: "
<> TLE.encodeUtf8 (T.pack (show sid))
respond $ responseLBS status404 [] msg
Just ch -> do
ch' <- dupChan ch
eventSourceAppChan ch req respond
首先打印,然后调用该函数,返回10,9,8,7等等。
答案 2 :(得分:0)
你以错误的方式阅读说明书...... 在函数体中,指令的顺序如下:
如果数字大于1,则函数调用函数并在打印值之前等待其完成。因此,如果调用print_numbers(10):
...
...
请注意,print
语句与if
语句具有相同的缩进。 Si调用if block
,然后继续执行print
语句。
答案 3 :(得分:0)
我一直在努力想像自己自己在递归函数中实际发生的情况。但是,事件的顺序是:
该函数被调用,并传递一个值给它。在您的示例中为10。
10然后存储在内存中 函数检查是否10> 1
,如果为true,则减去1
9传递回函数的开头并存储在内存中。它位于10之后,仍在内存中
功能检查9> 1 如果为true,则减去1
8然后传回,存储在内存等中
一直持续到传回的剩余值不大于1
我们现在有: 10、8、7、6、5、4、3、2
依次存储在内存中
然后该函数移至打印语句并打印出从最后一个要存储在内存中的数字,即2
然后丢弃2并继续进行处理3,以此类推,直到最终打印并丢弃10(内存中的第一个条目)。
试图弄清楚可追溯的阶乘方程在做什么之后,我发现了一个出色的可视化工具,可以帮助您理解此类方程式中发生的事情。
链接在这里:
为了简洁起见,我使用值4,但是如果要使用任何值,则可以编辑代码。
一些编码概念使我的大脑融化了,但我一直在努力学习!我希望该工具有所帮助,对我的确是:0)