본문 바로가기
파이썬

파이썬 공부하기 기초부터 시작 (재귀함수)

by ㈜㎹Ω∞ 2022. 7. 22.
728x90

재귀함수란 함수를 만든 뒤 그 함수 안에서 자신을 호출하는 함수입니다. 재귀함수를 사용할 때 끝나는 문구가 없다면 무한반복이니 꼭 끝나는 문구를 넣어주세요.

 

재귀함수(recursion)

재귀함수를 사용해서 나무 그림 그리기

 

import turtle as t

t.Turtle()
t.bgcolor("black")
t.color("white")
t.speed(50)

t.left(90)

def tree(length):
    if length>1:
        t.forward(length)
        t.right(45)
        tree(length/2)	### 재귀함수
        t.left(90)
        tree(length/2)	### 재귀함수
        t.left(135)
        t.forward(length)
        t.left(180)

tree(150)

 

turtle패키지를 사용해서 기본적인 배경색,펜색,속도를 설정해주고, 나무가 위로 그려질 수 있게 t.left(90)을 작성합니다. 그 밑에 이제 재귀함수를 만듭니다. 저는 tree라고 만들었습니다.

 

  • tree에 인자로 길이를 받습니다. 
  • if문을 사용해서 길이가 1보다 클때만 실행되게끔 설정합니다.
  • 150직진한 뒤 오른쪽으로 45도 꺾습니다.
  • 길이의 반만큼 직진합니다.(재귀함수라서 끝나면 시작한 곳에 있습니다.)
  • 왼쪽으로 90도 회전합니다.
  • 길이의 반만큼 직진합니다.(재귀함수라서 끝나면 시작한 곳에 있습니다.)
  • 일직선으로 가기 위해서 135도를 꺾습니다.(오른쪽 45도 왼쪽 90도 왼쪽으로 135도 꺾으면 원상복귀)
  • 150만큼 직진한 뒤 다시 위로 그려지게끔 180도 꺾습니다.
  • *****재귀함수를 사용한 부분은 길이가 1보다 작아질 때까지 재귀함수를 반복합니다.*****

 

 

색상 추가

 

import turtle as t

t.Turtle()
t.bgcolor("black")
t.color("white")
t.speed(1000)

t.left(90)

def tree(length):
    if length>1:
        if length<2:
            t.color("green")	### 색상넣기
        else:
            t.color("black")	### 색상넣기
            t.forward(length)
            t.right(30)
            tree(length/1.5)	### 재귀함수
            t.left(60)
            tree(length/2)	### 재귀함수
            t.left(150)
            t.forward(length)
            t.left(180)
            t.color("black")	### 색상넣기

tree(50)

 

나무 그림의 코드에 색상을 추가해서 끝부분만 초록색이 나오게 코드를 수정했습니다.

 

  • if문을 추가해서 길이가 2보다 작으면 초록색을 그렇지 않다면 검은색으로 그린다는 조건을 추가했습니다.
  • 여기서 중요한 거는 맨 마지막에 t.color("black")을 추가해서 마지막에 색상을 검은색으로 바꿔주는 겁니다.

 

같은 모양 반복

1번은 삼각형입니다.

 

### 1번모양
import turtle as t

t.Turtle()
t.bgcolor("black")
t.color("white")
t.speed(1)

def dr_test3(length):
    if length>10:
        dr_test3 (length/2)
        t.forward(length/2)
        dr_test3(length/2)
        t.left(120)
        t.forward(length/2)
        t.right(120)
        dr_test3(length/2)
        t.right(120)
        t.forward(length/2)
        t.left(120)
    else:
        for a in range(3):
            t.forward(length)
            t.left(120)

dr_test3(100)

 

2번은 사각형입니다. 길이를 조금 다르게 해서 만들었습니다.

 

### 2번모양
import turtle as t

t.Turtle()
t.bgcolor("black")
t.color("white")
t.speed(1000)

def dr_test3(length):
    if length>10:
        dr_test3(length/2)
        t.forward(length/3)
        dr_test3(length/2)
        t.left(90)
        t.forward(length/3)
        dr_test3(length/2)
        t.left(90)
        t.forward(length/3)
        dr_test3(length/2)
        t.left(90)
        t.forward(length/3)
        t.left(90)
    else:
        for a in range(4):
            t.forward(length)
            t.left(90)

dr_test3(100)
728x90

댓글