使用递归来反转python中的数字顺序

时间:2013-11-21 20:33:42

标签: python recursion

我如何使用递归来反转数字的顺序。我不知道从哪里开始。有人可以帮我一点吗。 例如输入= 1,2,3,4             输出= 4,3,2,1

我已经尝试过,这就是我所拥有的,但它仍然没有用。

def reverseDisplay(number):
    new_list=" "
    if len(number)==1:
            new_list=number
    else:
            new_list=reverseDisplay(number[1:]) + number[0] + " "
            return new_list    

def main():
    number=float(input("Enter a number :"))
    print(reverseDisplay(number))
main()

6 个答案:

答案 0 :(得分:4)

推理是这样的:

  1. 如果列表为空,则rev([])也是[] - 这称为“基本案例”
  2. 否则,反转其余部分(除第一个元素之外的列表)并将第一个元素追加到
  3. 这样

      rev ([1, 2, 3, 4])
    = rev (   [2, 3, 4])                   + [1]
    = rev (      [3, 4])             + [2] + [1]
    = rev (         [4])       + [3] + [2] + [1]
    = rev (          []) + [4] + [3] + [2] + [1]
    =                []  + [4] + [3] + [2] + [1]
    

    或者,在Python中

    def rev(lst):
        if lst: # list is not empty
            return rev(lst[1:])+[lst[0]]
        else:   # list is empty
            return []
    

答案 1 :(得分:1)

在python 3中,

def revRecur(n,ro=0):
if n//10==0:
    return (ro*10)+n
else:
    return revRecur(n//10,(10*ro)+(n%10))

print(revRecur(12345))

答案 2 :(得分:0)

编写一个方法来获取数字或列表。如果该参数的长度为1,则返回该数字,如果不使用不带第一个数字的列表调用相同的方法。然后返回调用返回的内容以及附加到末尾的第一个数字。

答案 3 :(得分:0)

这看起来像是家庭作业,所以我不会给出完整的解决方案,但我会提供一种方法来实现目标。如果这些数字被列为一个列表,那么我们就可以分解我们的解决方案:

if rest(lst).length == 0: #Check to see if we're down the first item
    return lst
else: #We need to break the list down some more
    return "call the method again on the rest of the list" + [first(lst)]
  1. 将列表细分为单个值
  2. 当我们找到一个项目时,开始备份列表(基本案例)
  3. 使用Python,使用stuff + [item]将列表连接在一起(只要“stuff”是另一个列表)。上面的else块将调用递归函数来分解列表,并且当它开始返回递归潜水时,它将以相反的顺序连接到列表中的第一个项目。当你进入单一列表时,就会发生这种返回,即if块捕获。

答案 4 :(得分:0)

你的问题有点含糊不清。人们不知道你是想要反转整数列表还是一串数字(因为你使用input,我认为它是后者)。

但是,我为每个人制定了解决方案,因此您可以选择任何一个:

>>> # For the list
>>> def rev(l):
...     return l and rev(l[1:]) + [l[0]]
...
>>> rev([1, 2, 3, 4])
[4, 3, 2, 1]
>>> rev([1, 2, 3, 4, 5, 6, 7, 8, 9])
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>>
>>> # For the digits
>>> def rev(n):
...     return n and rev(n[1:]) + n[0]
...
>>> rev('123')
'321'
>>> rev('123456789')
'987654321'
>>>

答案 5 :(得分:0)

def revr(n,r=0):
    if n==0:
        return r
    else :
        r=(r*10)+n%10
        return revr(n//10,r)