0

我需要一些帮助,以前的代码可以工作,现在不行了。帮助。目的是让用户使用递归向后查看向量。

int listar(int v[5], int l); 

void main(){ 
    int vector[5]={1,2,3,4,5}; 
    listar(vector,-1); 
} 

int listar(int v[5],int l){ 
    int n=0; 
    if (n<=5){ 
        cout<< listar(v, n+1)<< endl; 
    return v[n]; 
    } 
return v[5]; 
4

4 回答 4

0

该代码是递归的,您有 listar 被 listar 调用。

递归很好,但是因为您总是将 n 设置为 0,然后说“如果 n<5”,那么您将获得无限递归。

我想这就是你的意思:

int vector[5]={1,2,3,4,5}; 
    listar(vector,0); 
} 

int listar(int v[5],int l){  
    if (l<=5){ 
        cout<< listar(v, l+1)<< endl;
    }
    return v[l]; 

但这完全不同

于 2013-11-06T03:59:34.670 回答
0

在该方法int listar(int v[5],int l){中,您根本没有使用该参数l。代码不应该使用它而不是n=0在每个递归调用中进行。

于 2013-11-06T03:58:17.433 回答
0

这行得通,

int listar(int v[],int index);

int main(){ 
    int vector[5]={1,2,3,4,5}; 
    listar(vector,(sizeof(vector)/sizeof(*vector))-1); 
    system("pause");
    return 0;
} 

int listar(int v[],int index)
{
    if(index<0) return -1;
    cout<<v[index]<<"\n";
    listar(v,index-1);
    return v[index];
}

注意:您应该始终使用 int main 作为 main 函数的签名。

于 2013-11-06T04:06:59.413 回答
0
int listar(vector<int> v, int l); 

int main(){ 
    vector<int> v;
    v.push_back(0);
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    listar(v,-1); 
    return 0;
} 

int listar(vector<int> v,int n){ 
    if (n<5){ 
        cout<< listar(v, n+1)<< endl; 
    return v[n]; 
    } 
return v[5]; 
}
于 2013-11-06T04:08:33.993 回答