Rohyoohyun / C

0 stars 0 forks source link

파스칼 삼각형 ( 재귀함수 ) #36

Open Rohyoohyun opened 1 month ago

Rohyoohyun commented 1 month ago
#include <stdio.h>

int func_pos(int i, int j){ // 파스칼 삼각형 특정 위치값 계산 재귀 함수
    if (j == 0 || i == 0 || i == 1) return 1;
    if (i == j) return 1;
    return func_pos(i-1, j-1) + func_pos(i-1, j);  // 재귀 호출 (두 요소의 합)
}

void func_print(int row, int col){ // 특정 행 요소 출력 재귀함수
    if (col > row) {  // 모든 열 전체 출력
        puts("");
        return;
    }

    printf("%d ", func_pos(row, col));  // 현위치의 파스칼 삼각형 값 출력
    func_print(row, col+1);  // 다음 열 이동
}

void func(int n, int cur){ // 모든 행 출력 재귀함수
    if (cur >= n) return;  // 모든 행 전체 출력 후 종료
    func_print(cur, 0);  // 현재 행의 열 출력
    func(n, cur+1);  // 다음 행 이동
}

int main() {
    int n;
    scanf("%d", &n);
    func(n, 0);
    return 0;
}
Rohyoohyun commented 1 month ago
#include <stdio.h>

int func_pos(int i, int j){ // 파스칼 삼각형의 특정 위치 값을 계산하는 재귀 함수

    if(j==0||i==0||i==1) return 1;  // 기저 사례: 첫 번째 행, 첫 번째 열, 두 번째 행인 경우 1 반환
    if(i==j) return 1;  // 기저 사례: 열 번호가 행 번호와 같을 때 1 반환
    return func_pos(i-1,j-1) + func_pos(i-1,j);  // 재귀 호출: 위 두 요소의 합
}

// 파스칼 삼각형을 출력하는 함수
void func_print(int n){
    for(int i=0; i<n; i++, puts(""))  // 각 행을 출력 후 개행
        for(int j=0; j<=i; j++)  // 각 행의 요소를 출력
            printf("%d ", func_pos(i,j));  // 현재 위치의 파스칼 삼각형 값 출력
}

int main(){
    int n;
    scanf("%d",&n);  // 사용자로부터 n 값 입력 받음
    func_print(n);  // 파스칼 삼각형 출력
    return 0;
}