我是递归地做这个还是被认为是迭代?

时间:2015-03-31 21:09:38

标签: java recursion

public T get(int i) {

    if(i == 0 ){
        T val = cur.getData();
        cur = head;
        return val;
    }
    else{
        cur = cur.getNext();
        return get(i-1);
    }

}

//我必须递归地解决这个问题而且我不能使用迭代,这是使用迭代

1 个答案:

答案 0 :(得分:3)

  

我是递归地执行此操作还是将其视为迭代?

你的功能正在呼唤自己:

public T get(int i) {

    if(i == 0 ){
        T val = cur.getData();
        cur = head;
        return val;
    }
    else{
        cur = cur.getNext();
        return get(i-1); // <============ Here
    }

}

根据定义,这是递归,而不是迭代。

迭代看起来像这样:

public T get(int i) {
    T val = cur.getData();
    while (i-- > 0) {
        cur = cur.getNext();
        val = cur.getData();
    }
    cur = head;
    return val;
}

在那里,我们只是在get内循环,我们没有它自己调用。它不是递归示例的完美翻译,因为如果i开头是负面的,它处理的方式有点不同,但它可能符合意图(两个版本都可能使用某种防护来防范{{ 1}}开头是负面的。)