无法理解递归调用的“无”输出

吉藤

ideone的代码实现有不同寻常的要求

n = 42
new= []
m = 0

def convert(n,m):
    print "round #:", m,"n :", n
    a = ((n+1) % 3)-1
    if n:
        new.append(a); print 'new :', new
        print 'call convert(' (n+1)//3,',',m+1,'):',convert((n+1)//3,m+1)
        print 'after convert(' , n, ',' ,m,  ')','\n'
    else:
        print 'n==',n, 'new: ::: ', new,'\n\n',
        return new, n

print  convert(n,m), "<<---- None returned ? "

我不知道为什么在下面的输出中打印“无”。输出“无”打印在两个位置(大小写):

情况1。打印'after convert(',n,',',m,')','\ n'

案例2。打印convert(n,m),“ << ----没有返回值吗?”

我根本不清楚为什么如果默认情况'n = 0'具有列表'new'的适当值,那么在情况2中如何返回“ None”呢?

据我说,在第二种情况下,应该打印“新”内容。


更令人困惑的是:为什么案例1每次对于非零值“ n”都返回“无”?

根据我的说法,案例1应该没有“无”字样。

在此处输入图片说明

吴锡ong |

如果要避免将None作为输出,我们必须确保您的函数返回一个值。

在您的情况下,该语句中有一个return语句,else但没有该if语句。

您可以为if零件引入return语句,也可以更改函数return语句的缩进。

n = 42
new= []
m = 0

def convert(n,m):
    print "round #:", m,"n :", n
    a = ((n+1) % 3)-1
    if n:
        new.append(a); print 'new :', new
        print 'call convert(' +  str((n+1)//3,) + ',',m+1,'):',convert((n+1)//3,m+1)
        print 'after convert(' , n, ',' ,m,  ')','\n'
    else:
        print 'n==',n, 'new: ::: ', new,'\n\n',
    return new, n

print  convert(n,m)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章