Java 如何将简单方法转换为递归方法?
我创建了这个代码,根据头和腿的数量来计算动物的数量Java 如何将简单方法转换为递归方法?,java,recursion,Java,Recursion,我创建了这个代码,根据头和腿的数量来计算动物的数量 public class howmanyAnimals { public static void main(String[] args) { int Heads = 100; int legs = 300; int animals = animalHeads(Heads, legs); System.out.println("Number of cows: " +
public class howmanyAnimals {
public static void main(String[] args) {
int Heads = 100;
int legs = 300;
int animals = animalHeads(Heads, legs);
System.out.println("Number of cows: " + animals);
System.out.println("Number of chickens: "+ (Heads - animals));
}
static int animalHeads(int heads, int legs) {
int count = 0;
count = (legs) - 2 * (heads);
count = count / 2;
return count;
}
}
输出:
Number of cows: 50
Number of chickens: 50
这项工作很好,但是需要重新使用animalHeads方法
我尝试过这种方法
static int animalHeads(int heads, int legs) {
int count = 0;
count = (legs) - 2 * (heads);
count = count / 2;
if (count % 2 == 0) {
return 0;
} else if (count % 2 != 0) {
return count = animalHeads(100, 300);
}
return count;
}
}
但是我对递归有点生疏。嗯,
动物头
实际上是计算奶牛的数量
由于奶牛有一头和四条腿,递归步骤应为:
animalHeads(heads, legs) = 1 + aminalHeads(heads - 1, legs - 4);
但是,由于头和腿计数包括鸡,鸡有1头和2条腿,因此当所有剩余头和腿都属于鸡时,递归应该结束,当剩余腿数是剩余头数的两倍时,就会发生这种情况
static int animalHeads(int heads, int legs)
{
if (heads * 2 == legs) { // only chickens are left
return 0;
}
return 1 + animalHeads(heads - 1, legs - 4);
}
学习复发的最好方法是什么?我三天后要考试,这是唯一让我有点难堪的事。我理解一些基本的递归问题,比如阶乘和斐波那契,甚至河内塔,但当它们变得越来越难时,我会感到困惑。@DavidLing你必须思考如何将一个问题分解为同一个问题的实例,但输入量要小一些。在本例中,我向您展示了如何通过递归调用
animalHeads(heads-1,legs-4)
求解animalHeads(int-heads,int-legs)
。