2016-03-27 7 views
-1

1と最大Nビットの整数の間の整数を見つける必要があります。たとえば、n = 3の場合1 ... 999を返す必要があります。再帰を使用する。次は私のコードです。問題は、数値を表す正確なデータ構造がわからないことです。正確に戻る(n = 2):[1,2,3、.... 99]ですが、私は[[0,0]、[0,1]、.. [9,9]]を返します。リストを使用して番号を表します。誰もが数字を表す正確なfornを知っていますか?1と最大のNビットの間の整数を、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

これは宿題に非常に似ています。あなたの例に加えて、n = 3は1 ... 999ではなく1 ... 7(符号なしの場合)です。 ヒント:再帰関数のループには使用しないでください。 – hr0m

+0

ああ、私はそれをはっきり説明していないようでした。それはバイナリではなく10進数で話されます。それで1 ... 999ならn = 3 – liuxy

答えて

0

あなたの質問は、あなたができる

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

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

のようなリストを打つためにどのようにある場合:

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 

免責事項:テストしていませんこの

1

これはこれを行う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() 

を実行することによって、それをチェックアウトEDITED

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

もう一つの問題があるので動揺します。私はあなたのようなコードを変更しますが、結果は得られませんでした。私が書くコードは 'デフnumbersByRecursion(自己、n)は: 結果= [] 再帰(I、最大、結果) DEF再帰(NUM、最大、その結果): NUM場合>最大: リターン結果 結果.append(num) 再帰(num + 1、最大、結果) '結果を[1,2,3,4,5,6,7,8,9]として出力しますが、Noneを返します。 beacauseリストには返さないタイプがあるようですが、整数のリストを返してください。この問題を解決するにはどうすればよいですか? – liuxy

+0

答えをチェックしてください。あなたのコメントの編集を投稿しました。 – formatkaka

+0

申し訳ありません私はコメントuglyを提案しました:(私はstackoverflowに新しいです。そして、私は関数 'numberByRecursion'の最後にリターンを含めなかったことを理解しました。あなたのprogram'return再帰、最大、結果) '。それは返すなし。再帰の戻りは私を混乱させる! – liuxy

0

これは

>>>myfn(2) 
[1,2,.....,98,99] 
0123を与えるこの

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

をお試しください

希望があれば

関連する問題