Algorithm 递增数组递归中的整数拆分

Algorithm 递增数组递归中的整数拆分,algorithm,recursion,integer,Algorithm,Recursion,Integer,假设将整数拆分为数组,如100->[1,0,0] 如何编写递增长整数的递归函数。例如增加([9,9])->[1,0,0] 我知道如何以非递归的方式进行操作。这是@Mbo算法在Python中的一个示例实现: def addOne(a, ind, carry): if ind<0: if carry > 0: a.insert(0, carry) else: n = a[ind] + carry a[

假设将整数拆分为数组,如100->[1,0,0]

如何编写递增长整数的递归函数。例如增加([9,9])->[1,0,0]


我知道如何以非递归的方式进行操作。

这是@Mbo算法在Python中的一个示例实现:

def addOne(a, ind, carry):
    if ind<0:
        if carry > 0:
            a.insert(0, carry)
    else:
        n = a[ind] + carry
        a[ind] = n%10
        carry = n/10
        addOne(a, ind-1, carry)


n = int(raw_input("Enter a number: "))
a = []
if n == 0:
    a.append(0)

while n>0:
    a.append(n%10)
    n = n/10

a = list(reversed(a))
print "Array", a

# performing addition operation
addOne(a,len(a)-1,1)
print "New Array", a
伪码

function Increment(A[], Index)
   if Index < 0
       A = Concatenation(1, A)
   else
        if (A[Index] < 9)
            A[Index] = A[Index] + 1
        else
           A[Index] = 0
           Increment(A, Index - 1)

您可以使用下面的JS函数,它甚至是一个尾部调用优化的递归函数

var arr=[7,8,9],
brr=[9,9,9];
函数增量(a,r=[]){
返回a.length?(a[a.length-1]+1)%10?(a[a.length-1]++,a.concat(r))
:增量(a.slice(0,a.length-1),r.concat(0))
:[1]。混凝土(r);
}
控制台日志(增量(arr))

console.log(increment(brr))
请尝试改进标题:在第一次修订中,它一行包含两篇文章。
我知道如何以非递归方式执行。
(呈现(草图)您的非递归方法。)给定的迭代算法可以“机械地”转换为递归算法。如果设置n=99,则得到len(a)->327
function Increment(A[], Index)
   if Index < 0
       A = Concatenation(1, A)
   else
        if (A[Index] < 9)
            A[Index] = A[Index] + 1
        else
           A[Index] = 0
           Increment(A, Index - 1)
  Increment(A, A.Length - 1)