问题:通过掷骰子一次或多次来计算构造sumn
的方法数。每次投掷产生的结果介于1和6之间
解决方案:我已经为它编写了一个递归解决方案,它输出正确的答案。对于n
的大值,它应该会遇到堆栈溢出。所以我想避免它,并使用尾部递归方法重写代码。这是我的密码:
def numWays(n, arr):
answer = 0
for item in arr:
if item <= n:
if n == item:
answer += 1
else:
answer += numWays(n-item, arr)
return answer
li = [i for i in range(1,7)]
print(numWays(5, li)) #example n=5
我见过在web上编写阶乘函数作为尾部递归的例子,但这很容易。无法应用累加器技巧将所需答案存储为函数调用中的附加参数。一般来说,还有其他的技巧有效吗
这也可以重写为迭代函数,但我正在寻找将递归函数转换为尾部递归函数的一般方法。给定的问题、代码和Python只是一个示例。没有什么特别的
这是一个简单的解决方案,无递归,无任何,O(N):
结果:
可以轻松计算N=50000或500000的卷数
解决堆栈溢出问题的一种方法是手动模拟调用堆栈
输出:
相关问题 更多 >
编程相关推荐