2013-02-15 2 views
0

나는 아래의 공식을 기반으로, C에서 파스칼 삼각형 솔루션을 시도하고있다 :파스칼 삼각형 솔루션

#include <stdio.h> 
#include <stdlib.h> 

int pascalTriangle(int row, int col); 

int main() 
{ 
    int row, col; 

    printf("Enter the row [0 to n]: "); 
    scanf("%i", &row); 
    printf("Enter the column [0 to m]: "); 
    scanf("%i", &col); 

    if(col > row) { 
    printf("Error: column can be less than or equal to row\n"); 
    exit(1); 
    } 

    printf("Value = %i\n", pascalTriangle(row, col)); 
    return 0; 
} 

int pascalTriangle(int row, int col) 
{ 
    int value[100]; 
    value[0]=1; 
    int i=1; 
    if(row==0 || row==col || col==0) { 
    return value[0]; 
    } else { 
row=row+1; 
    while(i<=col) { 
     printf("i = %i\trow = %i\tcol = %i\n", i, row, col); 
     value[i]='\0'; 
     value[i]=(value[i-1]) * ((row-i)/i); 
     printf("value[%i] = %i\tvalue[%i] = %i\n", i-1, value[i-1], i, value[i]); 
     ++i; 
    } 
    return value[i-1]; 
    } 
} 
: Formula for Pascal tree

내가 위의 공식에 따라 아래의 코드를 작성

여기에 어느 정도까지는 적절한 O/P를 제공하고 있습니다. 그러나 많은 I/P에 대해 잘못된 대답을 발견했습니다. 논리적 인 오류를 발견 할 수 없습니다. 논리적 인 오류를 발견 할 수 없습니다. 예 : - 행 = 4를 부여하십시오 & col = 2, O/P는 6이어야하지만 O/P는 4가되어야합니다.

도와주세요 !!

+0

또한, 작성한 수식은 재귀 적이지만 반복을 사용하여 문제를 해결합니다. 재귀를 올바르게 다시 작성 했습니까? –

답변

2

라인

value[i]=(value[i-1]) * ((row-i)/i); 

가 잘못된 것입니다. row - ii으로 나눌 필요가 없습니다 (일반적으로 그렇지 않습니다). 먼저

value[i]=(value[i-1] * (row-i))/i; 

는 (그들이 암시하여 배치되어 있기 때문에 필요하지 괄호), 분할 후 곱해야하지만, 최대 공약수를 계산 row의 큰 값 때문에 당신은 이전 오버 플로우가

int g = gcd(row - i, i) 

을 입력하고 (row - i)/g, value[i-1]/(i/g)으로 나눈 다음 이들 결과를 곱하십시오.

0

rowi이 int 인 경우 ((row-i)/i)은 잘린 부분을 사용합니다. 따라서 row == 5i == 2 일 때 1.5 대신 1로 평가됩니다. 때문에 시리즈가 작동하는 방식의

, 난 당신이 어느 정도 표현을 재구성하여 부동 소수점 연산을 사용하지 않도록 할 수 있다고 생각 :

value[i]= (value[i-1]) * (row-i))/i;