Python-使用递归将数字字符串转换为整数?

Python-使用递归将数字字符串转换为整数?,python,recursion,Python,Recursion,假设我有一个字符串='123',但我想在不使用int()函数的情况下将其转换为123。我将如何继续使用递归来实现这一点? 到目前为止,我的想法是将字符串放入一个数组中,例如['1'、'2'、'3'],然后基于ASCII表示对其进行转换 对于字符串中的i: myArr.append(ord(i)-ord('0')) 现在我有一个类似于[1,2,3]的列表。下一步我应该做什么递归地得到123? 我有一个想法,使用位置值并将它们相加(即100+20+3=123),但我不知道如何做到这一点。任何想法都会

假设我有一个字符串='123',但我想在不使用int()函数的情况下将其转换为123。我将如何继续使用递归来实现这一点? 到目前为止,我的想法是将字符串放入一个数组中,例如['1'、'2'、'3'],然后基于ASCII表示对其进行转换

对于字符串中的i:

myArr.append(ord(i)-ord('0'))

现在我有一个类似于[1,2,3]的列表。下一步我应该做什么递归地得到123?
我有一个想法,使用位置值并将它们相加(即100+20+3=123),但我不知道如何做到这一点。任何想法都会有帮助

我想这是一个学术练习,因为这是一个相当做作的问题。假设
s
表示一个大于或等于零的整数:

def strToInt(s, acc):
    if not s:
        return acc
    return strToInt(s[1:], 10 * acc + ord(s[0]) - 48)
甚至更短:

def strToInt(s, acc):
    return strToInt(s[1:], 10 * acc + ord(s[0]) - 48) if s else acc
诀窍是将转换的结果累积到一个额外的参数中,这有一个很好的副作用,即产生一个尾部递归解决方案(这在Python中并不重要,但仍然…)。还要注意,我们如何使用
ord()
来获得表示数字的字符的数值,只需减去
48
就可以得到实际数字的值。测试它,它会按预期工作:

strToInt('123', 0) # the accumulator always starts in zero
=> 123

我想这是一个学术练习,因为这是一个相当做作的问题。假设
s
表示一个大于或等于零的整数:

def strToInt(s, acc):
    if not s:
        return acc
    return strToInt(s[1:], 10 * acc + ord(s[0]) - 48)
甚至更短:

def strToInt(s, acc):
    return strToInt(s[1:], 10 * acc + ord(s[0]) - 48) if s else acc
诀窍是将转换的结果累积到一个额外的参数中,这有一个很好的副作用,即产生一个尾部递归解决方案(这在Python中并不重要,但仍然…)。还要注意,我们如何使用
ord()
来获得表示数字的字符的数值,只需减去
48
就可以得到实际数字的值。测试它,它会按预期工作:

strToInt('123', 0) # the accumulator always starts in zero
=> 123

首先想到的是著名的C方法atoi()。 Python有一个类似的方法,但它已被弃用,其指令是使用int()

因此,尽管有您的评论,我还是建议使用int()。Python文档鼓励您使用它,所以不要害怕


首先想到的是著名的C方法atoi()。 Python有一个类似的方法,但它已被弃用,其指令是使用int()

因此,尽管有您的评论,我还是建议使用int()。Python文档鼓励您使用它,所以不要害怕


这不是递归的(我想你不明白这意味着什么),但是:


编辑:啊,我知道这是一个练习。是的,通过递归解决这是一个荒谬的问题,但另一个答案可以解决它。

这不是递归的(我想你不明白这意味着什么),但是:

编辑:啊,我知道这是一个练习。是的,通过递归解决这是一个荒谬的问题,但另一个答案可以解决它。

另一种可能性:

def strToInt(s):
  if s:
    return (ord(s[-1]) - ord('0')) + 10 * strToInt(s[:-1])
  else:
    return 0
另一种可能性:

def strToInt(s):
  if s:
    return (ord(s[-1]) - ord('0')) + 10 * strToInt(s[:-1])
  else:
    return 0

给我的练习是练习递归!当我可以使用int()时,我认为这是一个荒谬的练习,但我想真正理解递归是一个很好的实践。荒谬的部分不是你可以使用
int
,而是它可以通过
for
循环来解决。这是一个给我的练习递归!当我可以只使用int()时,我认为这是一个荒谬的练习,但我想真正理解递归是一个很好的实践。荒谬的部分不是你可以使用
int
,而是它可以通过
for
循环来解决。递归调用应该是
stroint
递归调用应该是
stroint