递归定义解决方案

时间:2013-05-31 08:22:20

标签: java

我正在从课本中学习期末考试。我需要一个问题的答案,因为我无法解决它。

1)写一个函数multiply(int a,int b)的递归定义,该函数取两个整数并返回它们的乘法结果。

我回答:

Multiply(a, b) :
0 - if a or b is equal to zero.   (I got -1 here. Reason written: only 1)
a * b - (I didn't know what to write here)

2) 编写一个递归方法,该方法获取整数的链接列表并返回其元素的总和。

我的解决方案是:

int sumList(Node<Integer> list) {

    int temp = list.getInfo();

    if(temp == null) {
        return 0;

    } else {
        return temp + sumList(temp.getNext);
    }
}

我修好了,我想:

 public int sumList(Node<Integer> list) {

    Node<Integer> temp = list;

    if(temp == null) {
        return 0;

    } else {
        return temp.getInfo() + sumList(temp.getNext());
    }
}

问题2的解决方案是否正确?

3 个答案:

答案 0 :(得分:3)

由于这是为了准备考试,我不想给你这样做的代码。相反,我会给你一些想法。

对于问题1,由于乘法是重复求和,你可以在此处使用它作为递归的基础。

如果要查找3 * 4,请使用递归计算并返回4 + 4 + 4.

换句话说,您可以看到下面出现的模式。

  

4 * 3 = 4 +(4 * 2)

     

4 * 3 = 4 + 4 +(4 * 1)

答案 1 :(得分:0)

A)好吧,真的需要重读有关递归的那一章。

数学原理是:

http://en.wikipedia.org/wiki/Mathematical_induction

并且维基百科文章将引导您完成更复杂的任务。

B)不,它根本不会编译。有多种语法错误。

尝试使用Java编译器来提高编程技能。

答案 2 :(得分:0)

要获得一个有效的递归解决方案,你需要一个基本情况,例如a == 0,然后通过递归调用自己来解决基本情况。

问题1的解决方案可能与此类似,它会减少a参数,直到达到0

int multiply(int a, int b) {
    if (a == 0 || b == 0) {
        return 0;
    } 
    return b + multiply(a - 1, b);
}

例如,multiply(2, 5)将成为5 + multiply(1, 5) - &gt; 5 + 5 + multiply(0, 5) - &gt; 5 + 5 + 0

请注意,此特定解决方案不适用于负数,但您可以理解。你应该能够轻松地为自己添加支持。