Algorithm 递增数组递归中的整数拆分
假设将整数拆分为数组,如100->[1,0,0] 如何编写递增长整数的递归函数。例如增加([9,9])->[1,0,0]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[
我知道如何以非递归的方式进行操作。这是@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)