2014-12-13 5 views
-3

파스칼 트라이앵글 코드입니다. 이것은 'n'행 (삼각형)의 각 새 번호에 대해 n-1 행에 두 개의 숫자를 더하여 작동해야합니다. 나는 숫자 '4'를주고, 나는 다음과 같이 볼 것을 기대한다 : 1 3 3 1. 그러나 대신에 나는 보았다 : 1. 어째서 그렇게 되었습니까? 당신이 그것을 삭제할 수 있도록
역 ©의 두 번째 변수() 아무 소용이 없습니다 :파스칼 Tiangle C++ 넘침 줄

#include<iostream> 
using namespace std; 
void fanc(int a[],const int m,int n){ 
    if(n==1){ 
     a[0]=1; 
    } 
    if(n==2){ 
     a[0]=1; 
     a[n]=1; 
    } 
    else{ 
     a[0]=1; 
     a[n]=1; 
     for(int i=1;i<n;i++){ 
      fanc(a,100,n-1); 
      a[i]=a[i-1]+a[i]; 
     } 
    } 
    return; 
} 
int main(){ 
    const int m=100; 
    int a[m],n; 
    cin>>n; 
    fanc(a,100,n); 
    for(int i=0;i<n+1;i++){ 
     cout<<a[i]<<'\t'; 
    } 
    system("PAUSE"); 
    return 0; 
} 
+0

당신이 디버거를 사용하고 잘못 어디로 검사 시도? – BlamKiwi

답변

1

은 몇 가지가 있습니다.
fanc()을 n 번만 사용하고 싶지만이 경우 fanc()을 사용할 때마다 fanc()을 n-1 번 사용하므로 fanc()이 n에 대해 사용됩니다! 모든 시간.

a[i]=a[i]+a[i-1] 

A [I]의 값을 실행할 때마다 그래서 사용 다음번 당신이 원하는 값 wont't 변경된다. 이 문제를 피하려면 결과를 다른 배열에 넣어야합니다.
여기에 내가 수정 한 코드는 다음과 같습니다

#include<iostream> 
using namespace std; 
void fanc(int a[],int n){ 
    if(n==0) 
     return; 
    if(n==1){ 
     a[0]=1; 
     return; 
    } 
    fanc(a,n-1); 
    int b[100]; 
    b[0]=1; 
    for(int i=1;i<n-1;i++) 
     b[i]=a[i]+a[i-1]; 
    b[n-1]=1; 
    for(int i=0;i<n;i++) 
     a[i]=b[i]; 
    return; 
} 
int main(){ 
    const int m=100; 
    int a[m],n; 
    cin>>n; 
    fanc(a,n); 
    for(int i=0;i<n;i++){ 
     cout<<a[i]<<'\t'; 
    } 
    system("PAUSE"); 
    return 0; 
} 
+0

문제를 찾아 주셔서 감사합니다. 단 하나의 배열을 사용하고 싶습니다. 그래서 다른 방법을 찾아야합니다. –