2016-03-27 6 views
-1

Ich muss die ganzen Zahlen zwischen 1 und der größten N-Bit-Integer, zB zu finden: wenn n = 3. Ich muss 1 ... 999 zurückgeben. Und mit Rekursion. Das folgende ist mein Code. Das Problem ist, dass ich die genaue Datenstruktur nicht kenne, um die Zahl darzustellen. Präzise zurückzugeben (n = 2): [1,2,3, .... 99], aber ich gebe zurück [[0,0], [0,1], .. [9,9]]. Ich benutze Liste, um die Nummer darzustellen. Kennt jemand das genaue Forn, um die Zahlen darzustellen?Finden Sie ganze Zahlen zwischen 1 und die größten N-Bits mit Rekursion in Python

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) 
+0

Das klingt sehr nach einer Hausaufgabe. Außerdem sollte Ihr Beispiel mit n = 3 nicht 1 ... 999, sondern 1 ... 7 sein (wenn es nicht signiert ist). Vielleicht ein Hinweis: Verwenden Sie KEINE for-Schleifen in rekursiven Funktionen. – hr0m

+0

Oh, ich schien es nicht klar zu erklären. Es wird im Dezimalformat nicht im Binärformat gesprochen. So ist es 1 ... 999, wenn n = 3 – liuxy

Antwort

0

Wenn Ihre Frage ist, wie eine Liste zu schlagen wie

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

in

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

dann könnten Sie tun:

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 

Haftungsausschluss: nicht getestet dies

1

Dies ist eine Möglichkeit, dies zu tun.

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 

Auch Sie möchten das vielleicht sehen. Recursion in Python? RuntimeError: maximum recursion depth exceeded while calling a Python object

Python has a recursion depth limit.

Check it out von

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 
+0

Ich bin verärgert, weil ich ein anderes Problem habe. Ich ändere meinen Code wie Sie, aber ich habe das Ergebnis nicht erhalten. Der Code, den ich schreibe, ist 'def numbersByRecursion (self, n): Ergebnis = [] Rekursion (i, größte, Ergebnis) def Rekursion (num, größte, Ergebnis): wenn num> größte: return result Ergebnis .append (num) Rekursion (num + 1, größtes Ergebnis) 'print das Ergebnis als [1,2,3,4,5,6,7,8,9], aber es gibt None zurück. Es scheint, da die Liste keinen Typ hat, der zurückgegeben werden soll, aber sie sollte eine Liste von ganzen Zahlen zurückgeben. Wie kann ich dieses Problem beheben? – liuxy

+0

Hie überprüfen Sie die Antwort. Posted die Bearbeitung für Ihren Kommentar. – formatkaka

+0

Entschuldigung, ich schlug den Kommentar so hässlich vor :(, Ich bin neu zu stackoverflow. Und ich fand heraus, dass ich Rückkehr am Ende der Funktion 'numberByRecursion' nicht enthalten. Als letzte Rückkehr in Ihrem Programm 'Rückkehr Rekursion (n , am größten, Ergebnis). "Es gibt keine zurück. Die Rückkehr in Rekursion macht mich verwirrt! – liuxy

0

diese

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

Dies gibt

>>>myfn(2) 
[1,2,.....,98,99] 
Versuchen EDITED Ausführung

Hoffe, das hilft

Verwandte Themen