【问题标题】:Find integers between 1 and the biggest N-bits using recursion in python在python中使用递归查找1到最大N位之间的整数
【发布时间】:2016-07-14 21:03:27
【问题描述】:

我需要找到介于 1 和最大 N 位整数之间的整数,例如:当 n = 3 时。我需要返回 1...999。并使用递归。以下是我的代码。问题是我不知道代表数字的确切数据结构。准确返回 (n=2):[1,2,3,....99],但我返回 [[0,0],[0,1],。 .[9,9]].我用列表来表示数字。有谁知道代表数字的确切形式吗?

class Solution:
# @param n: An integer.
# return : A list of integer storing 1 to the largest number with n digits.
def setOnebyOne(self,numList,number,n,index):
    if index == n-1:
        print 'index = n-1',n-1,number
        numList.append(number)
        return numList

    print index,'setting',number

    for i in range(10):
        if i == 0:
            number.append(i)
        else:
            number[index+1] = i
        print number
        self.setOnebyOne(numList, number,n,index+1)  

def numbersByRecursion(self, n):
    # write your code here
    if n <1:
        return None
    numList = []
    for i in range(10):
        print i
        number =[]
        print number
        number.append(i)
        print 'number[0]= ',number
        self.setOnebyOne(numList, number,n,0)

【问题讨论】:

  • 这听起来很像家庭作业。除了你的例子 n=3 不应该是 1...999 而是 1...7 (如果它是无符号的)。也许是一个提示:不要在递归函数中使用 for 循环。
  • 哦,我好像没有解释清楚。它是用十进制而不是二进制来讨论的。所以如果 n=3 则为 1...999

标签: python recursion permutation


【解决方案1】:

这是一种方法。

class Solution():
    def __init__(self,inp):
        self.inp = inp
        self.val = pow(10,inp) - 1
        self.ans = []

    def solution(self):
        if self.val>0:
            self.ans.append(self.val)
            self.val-=1
            self.solution()


inp = input()
sol = Solution(inp)

sol.solution()
print sol.ans

你也可能想看看这个。 Recursion in Python? RuntimeError: maximum recursion depth exceeded while calling a Python object

Python has a recursion depth limit

通过执行检查它

import sys
print sys.getrecursionlimit()

已编辑

def numbersByRecursion(n,largest,result):`
    def recursion(num,largest,result):
        if num <= largest:
            result.append(num)
            return recursion(num+1,largest,result) 
        else:
            return result
    return recursion(n,largest,result)


result = []
n = input()
largest = pow(10,n) - 1
ans = numbersByRecursion(1,largest,result)
print ans

【讨论】:

  • 我很沮丧,因为我遇到了另一个问题。我像你一样更改了我的代码,但我没有得到结果。我写的代码是def numbersByRecursion(self, n): result = [] recursion(i,largest,result) def recursion(num,largest,result): if num &gt; largest: return result result.append(num) recursion(num+1,largest,result) 打印结果为[1,2,3,4,5,6,7,8,9],但它返回None。似乎是因为列表没有返回类型,但它应该返回一个整数列表。我该如何解决这个问题?
  • 请查看答案。发布了您的评论编辑。
  • 对不起,我提出的评论太丑了:(,我是stackoverflow的新手。我发现我没有在函数'numberByRecursion'的末尾包含return。作为最后一个return你的程序'return recursion(n,largest,result)'。所以它返回 None。递归的返回让我很困惑!
  • 是的,这就是它返回 None 的原因。希望您的查询得到解决。
【解决方案2】:

如果你的问题是如何击败像这样的列表

list = [[0,0], [0,1], [0,2], ... , [9,9]]

进入

result_list = [0, 1, 2, 3, ..., 99]

那么你可以这样做:

def format_list(list):
    result_list = []
    for item in list:
        result = 0
        power = len(item)*10
        for digit in item:
            result += digit ** power
            power /= 10
        result_list.append(result)
    return result_list

免责声明:未对此进行测试

【讨论】:

    【解决方案3】:

    试试这个

    def myfn(n):
        def myfn2(i):
            if i==int(n*'9'):
                return [int(n*'9')]
            return [i]+myfn2(i+1)
        return myfn2(1)
    

    这给了

    >>>myfn(2)
    [1,2,.....,98,99]
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2017-03-27
      • 2016-07-05
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      相关资源
      最近更新 更多