본문 바로가기
  • Top Genius in the world
알고리듬

[알고리듬] #87 나무 그리기

by Mr.Algo 2025. 1. 5.
728x90
반응형

파이썬 실습창을 열 수 있습니다.실습창 열기

 

나무 그리기

위의 그림에서 재귀적 구조(리카시브 구조)를 찾아보라.

직선의 모임인데, 직선의 끝에서 두 갈레로 갈라지고, 짧아지고, 가늘어지는 규칙(rule)으로 변화된다. 이러한 규칙이 반복적으로 적용되는 그림이다.

이것이 재귀적 구조이다.

 

다음 코드는 위의 그림을 그린 코드이다.

왜 위와 같은 그림이 그려지는가 분석하라.

 

def rod(n,a,d,w):
    if n==0:return
    width(w)
    left(a)
    fd(d)
    rod(n-1,-30,d*0.8,w*0.8)  #오른쪽 가지
    rod(n-1,30,d*0.8,w*0.8)   #왼쪽 가지
    fd(-d)
    left(-a)

from turtle import*
shape('turtle')
color('green')
up(); goto(0,-200); down()
rod(8,90,120,10)
done()

이해하였으면 다음과 같은 그림을 그려보라.

열매(점)는 dot(20,'purple')으로 그릴 수 있다.

dot은 현재 위치(거북이 있는 곳)에 지름 20 픽셀인 자주색 점을 찍는다. 

 

다음이 코드이다.

더보기
def rod(n,a,d,w):
    if n==0:
        dot(20,'purple')
        return
    width(w)
    left(a)
    fd(d)
    rod(n-1,-30,d*0.8,w*0.8)
    rod(n-1,30,d*0.8,w*0.8)
    fd(-d)
    left(-a)

from turtle import*
shape('turtle')
color('green')
speed(0)
up(); goto(0,-200); down()
rod(8,90,120,10)
done()

# 거북이를 숨기려면 done() 위의 줄에 ht()을 넣으면 된다.
# ht는 hide turtle(거북이 숨기기)이다.

인수(argument)를 바꾸어 재미있는 그림들을 그려보라.

다음과 같은 그림도 그릴 수 있겠는가?

'마주보기'가 아니라 '어긋나기'이므로 생각을 조금 더 하여야 한다.

소스 코드는 공개하지 않는다.

 

함수 속에서 자기를 부르는 호출(calling)이 1회 있으면 단순 재귀(simple recursion)이고, 2번 이상 있으면 다중 재귀(multiple recursion)이다.

다중 재귀의 흐름을 이해하기 바란다.

 

수고하셨습니다.

안녕! 

728x90
반응형

'알고리듬' 카테고리의 다른 글

[알고리듬] #88 자 그리기  (0) 2025.01.07
[알고리듬] #86 장대 그리기  (1) 2025.01.03
[알고리듬] #85 재귀호출(recursive call)  (2) 2025.01.02
[알고리듬] #84 회돌이  (0) 2024.06.05
[알고리듬] #83 라이프 게임  (0) 2024.06.05