반응형
반복 함수를 사용하여 파스칼의 삼각형을 만드는 할당을 완료 한 후 재귀 함수를 사용하여 다시 만들려고했습니다. 인수로 전달 된 숫자에 해당하는 개별 행을 생성 할 수있는 지점에 도달했습니다. 그러나 해당 행까지 포함하여 전체 삼각형을 생성하려는 여러 시도는 실패했습니다. 입력 번호의 범위를 반복하고 해당 목록을 반환하기 전에 개별 줄을 목록에 추가하면서 반복 된 숫자로 재귀 함수를 호출하는 별도의 함수를 작성하려고했습니다. 원하는 출력은 각 내부 목록에 삼각형의 한 행이 포함 된 목록 목록이어야합니다. 이렇게 :
[[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
반응형
'파이썬' 카테고리의 다른 글
파이썬 numpy 행렬의 처음 n 개 열 추출 (0) | 2021.02.17 |
---|---|
파이썬 Github API v3에 가장 적합한 Python 라이브러리 (0) | 2021.02.17 |
파이썬 Image tk라는 모듈이 없습니다. (0) | 2021.02.17 |
파이썬 'str'객체는 Python에서 항목 할당을 지원하지 않습니다. (0) | 2021.02.17 |
파이썬 Python에서 두 개의 동일한 크기 이미지 오버레이 (0) | 2021.02.17 |
댓글