【发布时间】:2016-03-25 17:29:02
【问题描述】:
是的,这是家庭作业。我不要求任何简单的答案,只是帮助朝着正确的方向前进。这是分配:“创建一个接收两个数字的函数:a 和 b。该函数计算并返回 a 和 b 之间所有数字的乘积。创建此函数的三个版本。” 我使用 for 循环和 while 循环创建了函数,但我不知道如何使用递归 - 分配的最后部分。
【问题讨论】:
标签: loops recursion integer multiplication
是的,这是家庭作业。我不要求任何简单的答案,只是帮助朝着正确的方向前进。这是分配:“创建一个接收两个数字的函数:a 和 b。该函数计算并返回 a 和 b 之间所有数字的乘积。创建此函数的三个版本。” 我使用 for 循环和 while 循环创建了函数,但我不知道如何使用递归 - 分配的最后部分。
【问题讨论】:
标签: loops recursion integer multiplication
感谢您承认这是一道家庭作业题。因此,虽然我不会给你答案,但我会给你一些指示。
在编写递归函数时,需要考虑两个关键事项:
在您的情况下,您必须计算数字列表的乘积,结果如下:
要获得额外的功劳,请查看尾递归并了解它为何有助于降低内存使用量。
这是否给了你足够的开始?
【讨论】:
这是dynamic programming 的一个简单实例——您从一个问题开始,并尝试通过将其分解为更容易解决的问题并组合结果来解决它。
然后,您通常可以通过向后工作来解决这些问题:您可以立即回答的最微不足道的情况是什么?如果问题比这更难,你会怎么做?
正如您被明确告知要找到递归解决方案,您可以假设您正在寻找一种可以直接返回结果或必须使用修改后的参数调用自身的方法,并对结果执行某些操作以得到它自己的。
如果这个问题有点人为,请考虑查找如何使用递归结构从字面上实现 for 循环,然后直接调整现有的 for 循环。没有很好地思考分解问题的本质,只是看看如何以不同的方式表达你现有的解决方案。
【讨论】:
function recursiveMultiplication(num1, num2) {
if (num2 == num1) {
return num2;
}
return num2 * recursiveMultiplication(num1, num2 - 1);
}
console.log(recursiveMultiplication(5, 8));
【讨论】: