2017-12-07 1 views
1

私は返された値が、各桁文字列内の各文字に2を乗算する再帰関数を書くにはどうすればよいですか?

例の複製た文字列を返し、数与えられた再帰関数を完了しようとしている:507場合数は0のみ、その後であれば、550077

を返します。 -507戻り-550077

は、私はまだ実装されていない。ただ、それは負の数であれば、一度だけ

例負の符号を返すも0

を返します負の数を認識するためにything、私は最初

を動作するように私の機能を取得しようとしていたこれまでのところ、私は持っている:

def double(x): 
    if x == 0: 
     return x 
    else: 
     x = str(x) 
     return x[0]*2 + double(x[1: ]) 

print(double(527)) 

は、しかし、これははIndexErrorを返します:範囲 外の文字列インデックスを、私はそれがで働いていました結果を返すのではなく結果を出力しますが、私が厳密に解決しようとしている問題は、結果が返され、印刷されません。私は間違って何をしていますか?

+0

あなたはおそらくつもり 'lenは(X)== 0 'の代わりに' X == 0 'の –

+1

時々' X 'は番号であり、時にはそれが文字列だからあなたが問題を抱えています。それが文字列の場合、再帰はいつ止まるべきですか?それが欠けている場合です。 – alexis

答えて

1

これは、再帰的に働くのx == 0終了エラーを修正し、文字が倍増する前の数字であり、(代わりにSTRの)intとして最終的な答えを返すかどうかをチェックします。

def double(x): 
    x = str(x) 
    if len(x) == 0: 
     return '' 
    else: 
     first_char = x[0] 

     # only double if it's an integer 
     if first_char in map(str, range(10)): 
      first_char *= 2 
     return int(first_char + str(double(x[1: ]))) 

print(double(-527)) 

>>> -552277 
+0

ありがとう!地図を使用する代わりに elif x [0] == " - ": 返信 " - " + x [1] * 2 + double(x [2:]) 私は試験のために勉強しています。私は教授がマップ機能を使用したいとは思わないと思います。 –

0

このような機能が動作する可能性があります。

def double(x): 
    if x == 0: 
     return x 
    else: 
     x = str(x) 
     l=[] 
     for a in x: 
      if a == '-': 
       l.append(a) 
      else: 
       l.append(a*2) 
     return ''.join(l) 
+0

OPは再帰的解決を求めていました。ありがとう! – pault

関連する問題