2016-11-14 47 views
8

我的參數,n是一個整數的電話號碼。遞歸刪除一個整數的元素

使用遞歸我想返回整數中的前三個數字。

我翻了整成單個的字符數的列表,我試圖直到我留下了最後三一遍遍刪除最後一個號碼,但我卡在如何重複它。

def areaCodes(n): 
    n = str(n) 
    n = list(n) 
    del n[-1] 
    #n = reduce(opperator.add, n) 
    n = ''.join(n) 
    n = int(n) 
    return n 

我知道我應該在返回重複的名字莫名其妙,但由於n不是一個整數,我可以使用重複。我該怎麼辦?

+0

你必須使用遞歸? –

+0

使用while循環迭代,直到大小爲3 – MichaelMMeskhi

回答

0
import sys 

def areaCodes(n): 
#Create a list 
myList = list(str(n)) 
#Delete last element 
del myList[-1] 
#Combine your elements into string list 
myListStr = ''.join(myList) 
#Type cast to int 
myListInt = int(myListSte) 

#Check whether your list satisfies your condition 
if len(myList) > 3: 
    #Recusivley call the function again 
    return areaCodes(myListInt) 

#Return your list when recursion completes  
return myListInt 


n = 12345 
print areaCodes(n) 
+0

循環應該有條件'len(n)> 3',否則當給定的輸入短於'3'時,它將以無限循環結束。 –

+0

我的壞會修復它 – MichaelMMeskhi

+0

這是如何遞歸? –

1

我認爲這是一個練習,其中遞歸是必要的。如果是的話,試試這個(有更好的方式來實現自己的最終目標,但我試圖修改現有的代碼儘可能少):

def areaCodes(n): 
    n_lst = list(str(n)) 
    del n_lst[-1] 
    n_str = ''.join(n_lst) 
    n_int = int(n_str) 
    if len(n_lst) > 3: 
     return areaCodes(n_int) 
    return n_int 

這將再次調用該函數如果號碼的長度大於3,否則返回數字。基本上,你原來的功能中唯一缺少的部分是以下內容,這是遞歸部分:

if len(n_lst) > 3: 
    return areaCodes(n_int) 
2

這樣的事情呢?

def areaCodes(n): 
    # if n is less than 1000, what does it mean about the number of digits? 
    if n < 1000: 
    return # fill... 

    # otherwise, if n is greater than 1000, how can we alter n to remove the last 
    # digit? (hint: there's an operation similar to division called f...r division) 
    return areaCodes(# operate on n somehow...) 
1

請記住,一個功能是遞歸的,它有兩個主要特徵:

  1. 它會在某個時刻調用本身。 (這是什麼使它'重複')
  2. 它將有一些停止條件(或基準案例)。

當你寫到你應該使用「回報中的名字」時,你提到了#1,這太棒了!您只需在您的代碼中寫入:

return areaCodes(n),其中n是已更新的電話號碼,已刪除一位數字。你可以看到,每個遞歸調用都應該對解決方案做一些工作,並且應該將其迷你解決方案傳遞給下一個遞歸調用。

除上述#2外,還需要指定一個基本情況,遞歸將停止。所以,由於每次調用函數時都會取走數字,因此您應該包含某種檢查以查看當前輸入是否是您想要的長度。

如果它是正確的長度,你完成了,你應該返回當前的數字(不是另一個遞歸調用)。

否則,你是不是用遞歸方法來實現呢。