【问题标题】:How return length of array when using recursion?使用递归时如何返回数组的长度?
【发布时间】:2021-09-23 23:28:03
【问题描述】:

编写一个以整数作为输入的函数,并返回在该数字的二进制表示中等于 1 的位数。你可以保证输入是非负的。

示例:1234 的二进制表示是 10011010010,所以在这种情况下函数应该返回 5。

我使用递归创建了这个程序,我想返回数组的长度。你知道怎么做吗?我想保持(如果可能的话)我写的同样的逻辑。提前致谢 **

def count_bits(n):
    base = n
    count = []
    base = n // 2
    if base:
        if base % 2 ==1:
            count.append(base % 2)
            count += count_bits(base)
        else:
            count += count_bits(base)
    return count 

print(count_bits(1234)) # return the array and I want the length
#print(len(count_bits(1234))) # I can not use this method 

【问题讨论】:

  • 为什么需要一个列表? (更不用说递归了,假设它是练习的一部分。)
  • 为什么它应该返回 5??
  • 你好,因为10011010010中有5个

标签: python recursion


【解决方案1】:

尝试使用全局变量


array_length = 0
def count_bits(n):
    global array_length # global variable
    base = n
    count = []
    base = n // 2
    if base:
        if base % 2 ==1:
            count.append(base % 2)
            array_length+=1 # increment when value is 1
            count += count_bits(base)
        else:
            count += count_bits(base)
    return count 

count_bits(1234)
print(array_length)

【讨论】:

  • 很好,这行得通。谢谢老兄
【解决方案2】:
def count_bits(n):
    count = 0
    while n:
        count += n % 2
        n = n // 2
    return count

输出:

>>> print(count_bits(1234))
5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多