簡體   English   中英

在python中使用遞歸查找1和最大N位之間的整數

[英]Find integers between 1 and the biggest N-bits using recursion in python

我需要找到介於 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)

這是一種方法。

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

你也可能想看這個。 Python中的遞歸? 運行時錯誤:調用 Python 對象時超出了最大遞歸深度

Python 有遞歸深度限制

通過執行檢查它

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

如果您的問題是如何擊敗像

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

免責聲明:沒有測試這個

嘗試這個

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]

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM