复活节彩蛋在java上的递归函数

时间:2016-04-04 10:54:55

标签: java algorithm recursion tail-recursion recurrence

我在java中获得了一项任务,它涉及一个复活节彩蛋游戏,当我给你的鸡蛋开始时它会开始,并且当你剩下几个鸡蛋时就会结束。在比赛的任何阶段,假设你还剩下鸡蛋,那么你可以回馈一些鸡蛋,但你必须遵守以下规则:

•如果n是偶数,那么你可以准确地回馈n / 2个蛋。

•如果n可以被3或4整除,那么你可以将n的后两位数相乘并将其返回 很多鸡蛋。

•如果n可以被5整除,那么你可以准确地给出m个鸡蛋。

•如果n是素数,那么您可以回馈一个鸡蛋。

我必须编写一个名为picnic的函数,如果按照某种顺序应用规则,我们就会返回true;否则为假:

public static boolean picnic(int n, int m) { … }

我的任务是:

a)提供野餐的重复关系(int n,int m)

b)使用递归关系

在Java中实现递归函数

c)为野餐开发完整的递归调用树(250,42)

d)这里的递归模式是什么? (尾递归与否?树或线性递归?)

e)此功能是否提醒任何算法设计策略?如果是这样,哪一个?

我已经做了问题a)以此作为答案:

public class EasterEggs {   
    public static boolean picnic (int n, int m) {
        if (n == m)
        return true;
        else return (picnic(n,m));
    }
}

我不确定如何实现递归函数。我尝试了几次,但仍然没有。

问题b和c是我最大的问题,我确定我能弄清楚d和e。有人可以帮我这个吗?并可能告诉我如何实施它?

3 个答案:

答案 0 :(得分:1)

在递归关系中,我们不必像您在问题中提到的那样定义类和方法。这是树递归而不是尾递归。 而这个功能让我们想起了回溯设计策略。

对于b)部分我的解决方案是简单而蛮力。

<ul class="list">

  <li class="box-wrapper">
    <div class="box"></div>
    <div class="box"></div>
  </li>
  <li class="box-wrapper">
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
  </li>
  <li class="box-wrapper">
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
  </li>
  <li class="box-wrapper">
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
  </li>
  <li class="box-wrapper">
    <div class="box"></div>
    <div class="box"></div>
  </li>
</ul>

答案 1 :(得分:0)

你必须:

创建一个表示不同规则的枚举(其中有4个:p)。让我们承认你列举了枚举ERule

使用args

创建递归函数
  • 剩余的鸡蛋(最初== n)

递归函数的退出条件:

  • n = m(true)
  • n&lt; m(假)
  • 没有规则可以适用于n(假)

如果不满足退出条件,则只需为每个可以应用于当前n的规则调用递归函数(根据您测试的条件在修改后的n值上调用它)。结果是对所有结果的OR语句。

答案 2 :(得分:0)

返回给定数组是否可整除的最佳函数

/* 样本数据

  • {3, 3, 6, 36} 3
  • {4} 2
  • {3, 4, 3, 6, 36} 3
  • {6, 12, 24, 36} 12
  • {} */

公共类 IsDivisible {

public static void main(String[] args) {

    int[] sampleData = { 3, 3, 6, 36 };
    int divisible = 3;

    int result = isDivisible(sampleData, divisible);
    System.out.println(result);

}

static int isDivisible(int[] givenArray, int isDivisible) {

    for (int i = 0; i < givenArray.length; i++) {

        if ((givenArray[i] % isDivisible) != 0) {

            return 0;

        }
    }

    return 1;
}

}