0

这是如何执行的?

def f(x):
    return x>0 and (x%2)+f(x/2) or 0

x是一个数组,例如:[1, 1, 1, 3]

4

4 回答 4

2

此代码已损坏。对于初学者来说,x>0总是如此。但是x%2x/2产生类型错误。

于 2010-05-19T11:53:51.577 回答
0

该函数以数字 x 的二进制形式递归地计算 1 的数量。

每次该函数将最低位(1 或 0)与没有最后一位的数字的位数相加(除以 2 就像右移 1),或者如果没有更多位,则与 0 相加。

例如:该函数将返回 2 表示 5 作为输入(5 是二进制的 101) 该函数将返回 3 表示 13 作为输入(13 是二进制的 1101)...

于 2010-05-19T12:07:33.987 回答
0

你是这个意思吗?

$ python
Python 2.5.5 (r255:77872, Apr 21 2010, 08:40:04) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def f(x):
...     return x>0 and (x%2)+f(x/2) or 0
... 
>>> f([1, 1, 1, 3])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in f
TypeError: unsupported operand type(s) for %: 'list' and 'int'
于 2010-05-19T11:53:05.330 回答
0

语句中的评估return与任何其他地方的评估没有什么不同。如果x是一个列表,这整个事情毫无意义并且会引发TypeErrorx应该是一个数字才能工作。

如果x是一个数字,它将按如下方式工作:

  • 评估x>0语句
  • 如果是True退货(x%2)+f(x/2)部分。当然,它会无限递归
  • 如果是False返回0
于 2010-05-19T11:53:41.447 回答