public T get(int i) {
if(i == 0 ){
T val = cur.getData();
cur = head;
return val;
}
else{
cur = cur.getNext();
return get(i-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}}开头是负面的。)