Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将简单方法转换为递归方法?_Java_Recursion - Fatal编程技术网

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)