C++递归字符打印

C++ Recursion Character Printing

本文关键字:打印 字符 递归 C++      更新时间:2023-10-16

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

#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

等:

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

#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;
}

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

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

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

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

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