以递归方式删除整数元素

时间:2016-11-14 22:48:18

标签: python recursion

我的参数n是一个整数的电话号码。

使用递归我想返回整数中的前三个数字。

我已将整数转换为单个数字字符列表,我试图一遍又一遍地删除最后一个数字,直到我离开最后三个,但我&#39 ;我坚持如何重复它。

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不是一个我可以用来重复的整数。我该怎么办?

4 个答案:

答案 0 :(得分:3)

这样的事情怎么样?

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 :(得分:2)

我认为这是一个需要递归的练习。如果是这样,试试这个(有更好的方法来实现最终目标,但我尝试尽可能少地修改现有代码):

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 :(得分:2)

请记住,对于要递归的函数,它将有两个主要属性:

  1. 在某些时候自称。 (这就是'重复'的原因)
  2. 它会有一些停止条件(或基本情况)。
  3. 当你写下你应该使用“返回中的名字”时,你提到了#1,这太棒了!你只需要在你的代码中写下它:

    return areaCodes(n),其中n是已移除数字的更新电话号码。

    正如您所看到的,每个递归调用应该对解决方案做一些工作,并且应该将其迷你解决方案传递给下一个递归调用。

    与上面的#2一起,您需要指定一个基本情况,递归将停止。因此,由于每次调用函数时都会删除一个数字,因此应该进行某种检查以确定当前输入是否是您想要的长度。

    如果是正确的长度,你就完成了,你应该返回当前的号码(而不是另一个递归的号码)。

    否则,你还没有完成递归。

答案 3 :(得分:1)

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)