Edit: Исправленный код (Спасибо за ответы и помощь!)C++ Рекурсия символов Печать
#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=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' никогда не становится равным нулю? Или, по крайней мере, не скоро, прежде чем у вас возникнет переполнение стека из-за чрезмерной рекурсии вашей функции arr1. – lurker
Итак, я добавил: if (i == 2 * n) { cout << "\ n"; return arr1 (n, 1, - j);} Теперь он печатает, но по-прежнему существует ошибка форматирования. – user2821771
Почему декремент j у меня в исходном коде, который я разместил, не меняет значение j? Я думал, что это уменьшит j, а затем достигнет рекурсивного шага. частью моей проблемы было также то, что я не сбросил счетчик i после того, как j был изменен. – user2821771