【问题标题】:multiplication of all integers between two given variables using recursion使用递归将两个给定变量之间的所有整数相乘
【发布时间】:2016-03-25 17:29:02
【问题描述】:

是的,这是家庭作业。我不要求任何简单的答案,只是帮助朝着正确的方向前进。这是分配:“创建一个接收两个数字的函数:a 和 b。该函数计算并返回 a 和 b 之间所有数字的乘积。创建此函数的三个版本。” 我使用 for 循环和 while 循环创建了函数,但我不知道如何使用递归 - 分配的最后部分。

【问题讨论】:

    标签: loops recursion integer multiplication


    【解决方案1】:

    感谢您承认这是一道家庭作业题。因此,虽然我不会给你答案,但我会给你一些指示。

    在编写递归函数时,需要考虑两个关键事项:

    1. 什么停止了递归,以及
    2. 在递归停止之前会发生什么

    在您的情况下,您必须计算数字列表的乘积,结果如下:

    1. 当列表中只有一项时,该函数应该做什么? (即:当 a 和 b 相同时)
    2. 如何将一个元素乘以列表其余部分的乘积?

    要获得额外的功劳,请查看尾递归并了解它为何有助于降低内存使用量。

    这是否给了你足够的开始?

    【讨论】:

      【解决方案2】:

      这是dynamic programming 的一个简单实例——您从一个问题开始,并尝试通过将其分解为更容易解决的问题并组合结果来解决它。

      然后,您通常可以通过向后工作来解决这些问题:您可以立即回答的最微不足道的情况是什么?如果问题比这更难,你会怎么做?

      正如您被明确告知要找到递归解决方案,您可以假设您正在寻找一种可以直接返回结果或必须使用修改后的参数调用自身的方法,并对结果执行某些操作以得到它自己的。

      如果这个问题有点人为,请考虑查找如何使用递归结构从字面上实现 for 循环,然后直接调整现有的 for 循环。没有很好地思考分解问题的本质,只是看看如何以不同的方式表达你现有的解决方案。

      【讨论】:

        【解决方案3】:
        function recursiveMultiplication(num1, num2) {
            if (num2 == num1) {
                return num2;
            }
        
            return num2 * recursiveMultiplication(num1, num2 - 1);
        }
        console.log(recursiveMultiplication(5, 8));
        

        【讨论】:

        • 老实说我今天学习了递归。您所需要的只是奉献精神和努力工作。但不要自己做所有事情,学习其他人如何用这种方式编码,你会以更简单的形式划分你的问题:D
        猜你喜欢
        • 2017-11-18
        • 2022-07-28
        • 1970-01-01
        • 1970-01-01
        • 2018-07-16
        • 2022-12-16
        • 2019-10-28
        • 2021-08-31
        • 2015-07-12
        相关资源
        最近更新 更多