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的解决方案是否正确?
答案 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
。
请注意,此特定解决方案不适用于负数,但您可以理解。你应该能够轻松地为自己添加支持。