본문 바로가기
파이썬

파이썬 재귀 파스칼 삼각형

by º기록 2021. 2. 17.
반응형

반복 함수를 사용하여 파스칼의 삼각형을 만드는 할당을 완료 한 후 재귀 함수를 사용하여 다시 만들려고했습니다. 인수로 전달 된 숫자에 해당하는 개별 행을 생성 할 수있는 지점에 도달했습니다. 그러나 해당 행까지 포함하여 전체 삼각형을 생성하려는 여러 시도는 실패했습니다. 입력 번호의 범위를 반복하고 해당 목록을 반환하기 전에 개별 줄을 목록에 추가하면서 반복 된 숫자로 재귀 함수를 호출하는 별도의 함수를 작성하려고했습니다. 원하는 출력은 각 내부 목록에 삼각형의 한 행이 포함 된 목록 목록이어야합니다. 이렇게 :

[[1], [1, 1], [1, 2, 1]...]

대신 1로 완전히 채워진 중첩 목록의 뒤죽박죽을 반환합니다.

다음은 행을 추가하는 두 번째 함수가없는 문제의 재귀 함수입니다 (어쨌든 하나의 모든 포함 함수를 원했습니다).

def triangle(n):
    if n == 0:
        return []
    elif n == 1:
        return [1]
    else:
        new_row = [1]
        last_row = triangle(n-1)
        for i in range(len(last_row)-1):
            new_row.append(last_row[i] + last_row[i+1])
        new_row += [1]
    return new_row

명확하게 말하면, 나는 이미 할당 된 작업을 완료했습니다. 이것은 단지 재귀에 대한 더 깊은 이해를 제공하기위한 것입니다.

반복적 인 솔루션 :

def triangle(n):
    result = []
    for row in range(n):
        newrow = [1]
        for col in range(1, row+1):
            newcell = newrow[col-1] * float(row+1-col)/col
            newrow.append(int(newcell))
        result.append(newrow)
    return result

 

해결 방법

 

재귀를 통해 목록 목록을 전달하고 목록의 마지막 요소 (즉, 삼각형의 마지막 행)를 선택하여 새 행을 작성하기 만하면됩니다. 이렇게 :

def triangle(n):
    if n == 0:
        return []
    elif n == 1:
        return [[1]]
    else:
        new_row = [1]
        result = triangle(n-1)
        last_row = result[-1]
        for i in range(len(last_row)-1):
            new_row.append(last_row[i] + last_row[i+1])
        new_row += [1]
        result.append(new_row)
    return result

 

참조 페이지 https://stackoverflow.com/questions/10628788

 

 

반응형

댓글