편집 : 수정 코드 내가 정수 n을 소요하는 프로그램을 작성하기 위해 노력하고있어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'는 결코 0이되지 않을까요? 또는 최소한'arr1' 함수의 과도한 재귀 때문에 스택 오버플로가 발생하기 전에는 충분하지 않습니다. – lurker
그래서, 다음과 같이 추가했습니다 : if (i == 2 * n) { cout << ""\ n "; return arr1 (n, 1, -j);} 이제 인쇄되지만 서식 오류가 있습니다. – user2821771
내가 게시 한 원본 코드에서 j의 감소가 j의 값을 변경하지 않는 이유는 무엇입니까? 내 생각에 그것은 j를 감소시키고 재귀 적 단계에 도달 할 것이라는 것이었다. 내 문제의 일부는 j가 변경된 후 카운터 i를 재설정하지 않았다는 것입니다. – user2821771