0

编辑:更正的代码(感谢您的回答和帮助!)

#include <iostream>
using namespace std;

int arr1(const int n,int i, int j){
  if(j != 0) {
    /* if(i == 2*n ){
    cout<<"\n";
    --j;}*/
   if((i <=  (n-j) || (i >= (j+n)) && i <2*n)){
    cout<<" ";
   }
  if(i < n && i > (n-j)){
    cout<<"\\";
  }
  if( i > n && i < (n+j)){
    cout<<"/";

  }
  if(i == n){
    cout<<"v";

  }
  if(i == 2*n ){
    cout<<"\n";
    i = 0;
    --j;}
  return arr1(n,++i,j);

}
  return 0;
}

  int main(){
    int c;
    cin>>c;
    arr1(c,1,c);

  }

我正在尝试编写一个采用整数 n 并递归打印箭头类型设计的程序

n=1 ->  v
n=2 ->  \v/
         v

n=3 ->  \\v//
         \v/
          v

ETC:

到目前为止,这是我的代码,但我不断收到分段错误。我假设这是因为代码中某处存在无限循环。

#include <iostream>
using namespace std;

int arr1(const int n, int i, int j)
{
    if (j != 0)
    {
        if (i == 2 * n)
        {
            cout << "\n";
            --j;
        }
        if (i <= n - j || i >= j + n)
        {
            cout << "_";
        }
        if (i < j)
        {
            cout << "\\";
        }
        if (i > j)
        {
            cout << "/";

        }
        if (i == n)
        {
            cout << "v";

        }
        return arr1(n, ++i, j);

    }
    return 0;
}

int main()
{
    int c;

    cin >> c;
    arr1(c, 1, c);

    return 0;
}
4

2 回答 2

0

是否递归的决定归结为j-- 但你j从接收main,并且以后永远不要修改它,除非i==2*n在递归调用自身时传递完全相同的值。所以是的,这会导致无限递归(假设您最初为 传递了一个非零值j,无论如何)。

于 2013-09-27T02:30:05.560 回答
0

你在函数中的逻辑arr1是错误的,例如,如果c=3在一开始,

i, j, n 中的值arr1将在每次迭代中

i = 1 j = 3  n = 3
i = 2 j = 3  n = 3
i = 3 j = 3  n = 3
i = 4 j = 3  n = 3
i = 5 j = 3  n = 3
i = 6 j = 2  n = 3
i = 7 j = 2  n = 3
i = 8 j = 2  n = 3
i = 9 j = 2  n = 3
i = 10 j = 2  n = 3
i = 11 j = 2  n = 3

...

然后它会一直持续到堆栈溢出。

于 2013-09-27T02:36:24.917 回答