0

我的代码如下:

public int workTimeSum(list of parameter){

    int i=0,sum=0,flag=-1;
    boolean b=true;
    Stack<NonOverlapIntervals> str;

    if(st.size()!=1){
        b=recursiveCheck(non_overlap_list,st,Ioj);

        if(b==false){
            st.pop();
        }

        System.out.println("now size is:"+st.size());
    }

    str=(Stack<NonOverlapIntervals>) st.clone();
    System.out.println("Stack is ss");
    while(!str.empty()){
        System.out.println(str.pop().self_id);
    }

    if(b || st.size()==1){
        for(NonOverlapIntervals obj:non_overlap_list){
            i++;

            if(obj.id==ids){

                if(st.size()!=1 && object_Present(st,obj)){

                    continue;
                }
                else{
                    st.push(obj);
                    sum=workTimeSum(non_overlap_list,obj,st,obj.self_id,i);

                    if(sum_max<sum)
                        sum_max=sum;
                }
            }
        }
        flag=1;
    }
    else{
        return 0;
    }

上面是一个递归代码。

您需要在上面的代码中看到的只是sum,sum_max变量。

我正在计算总和并检查它是否大于sum_max每次计算总和。

sum_max但是因为我在每次调用后都初始化为零,所以我sum_max变成了 0;

如果我声明sum_max为全局变量,问题就解决了。但我不允许使用全局变量。

我也尝试传递sum_max递归函数的参数,但这不起作用。

4

2 回答 2

1

如果您只是检查它是否为空,则可以初始化变量而无需第二种方法,如果是,则初始化它并将其传递给下一个方法(因此它将被初始化)

//very basic endless example
public void myRecursiveMethod(Object var){

    if (var==null){
      var = new Object();
    }

    myRecusivemethod(var);
}
于 2013-10-13T13:27:18.000 回答
0

我认为答案在于您提出问题的方式。您误解了:递归时没有初始化变量。您只需初始化一次

为此,有时为递归的第一步(“基本情况”)创建另一种方法可能会有所帮助,该方法进行初始化。

但是,您发布的代码实际上与您描述的情况并不匹配。在您发布的代码中,您根本没有初始化 sum_max 。所以我很困惑。

于 2013-10-13T13:10:18.353 回答