有关递归的问题,尝试安排最大事件数

时间:2010-11-08 19:05:47

标签: java recursion

我正在尝试使用递归试图变得更好。我当前的活动是尝试编写一个递归方法,该方法生成可以调度的最大事件数。到目前为止,这是我的方法:

 public int maxEvents(int n, int[] Start) {
  if(n<=0) return 0;
  if(n==1) return 1;
  else return maxEvents(n-1, Start) + maxEvents(Start[n]-1, Start);
 }

基本上我的main方法将maxEvents传递给int n,这是最后一个Event。所以说我有4个事件(1-4)然后n将是4.下一部分是一个数组,它在索引处的值是事件开始的时间,索引本身就是事件结束的时间。

前提条件是:

n&gt; = 0

天和约定从1到n

事件n在(并包括)第n天结束,并从开始[n]

开始

开始[0]未使用

对于从1到n的所有i,开始[i]&lt; = i(当然,我没有比结束日更晚开始的会议。)

最后我的方法应该返回:

如果必须仅从约定1到n中选择,则可以托管的最大约定数。 (如果n = 0,则此设置为空)

输入/输出的一些示例:

n = 3开始[1] = 1开始[2] = 1开始[3] = 3

maxEvents = 2

或者:

n = 5开始[1] = 1开始[2] = 1开始[3] = 2开始[4] = 3开始[5] = 4

maxEvents = 3


我的两个递归调用应该在不邀请n的情况下计算最大数量,然后您可以从1到n-1进行选择。并计算邀请n的最大数量,注意Begin [n] -1是最后一个与约定n的开头不冲突的约定。然后我可以取两者中的最大值,然后返回。

我尝试过使用不同的if语句,例如:

if(“recursion call 1”&gt;“recursion call 2”){ 返回“递归调用1”; }

使用像“maxEvents(Start [n] -1,Start)”之类的东西作为我的递归调用之一(就像我上面的代码中使用的那样)但是它没有返回正确的值,就像我上面列出的那样。总而言之,我对递归的概念有困难,而且我知道递归调用有问题,所以如果有人能指出我正确的方向那就太好了。谢谢!

1 个答案:

答案 0 :(得分:1)

这有用吗?

return Math.max(maxEvents(n-1, Start), 1 + maxEvents(Start[n]-1, Start))

这个想法是你分成两个相互排斥的情况:一个不包括第n个事件,另一个包含第n个事件。在这两者中,你必须选择更大的。因此添加两者是不正确的 - 采取最大值是正确的方法。但是你还必须在第二个选项中加1,以便考虑包含第n个事件。