내배캠 TIL WIL/내배캠 til

내배캠 TIL 11일차 (재귀함수)

zfz 2022. 11. 28. 21:08

모두가 앓는 소리를 내는 재귀함수

저도 경험해 보겠씁니다

 

자기자신을 호출하는 함수를 재귀함수라 한다

말만 들으면 일반적인 논리로는 왜 쓰는지 이해할 수가 없다

이미 있잖아, 어캐 또 부름

 

1. 기초

 

 

주어진 예제는 보신각 카운트 다운

 

def count_down(number):
    print(number)          # number를 출력하고
    count_down(number - 1) # count_down 함수를 number - 1 인자를 주고 다시 호출한다!


count_down(60)
 
전혀 머리에 든게 없는 싱싱 돌대갈에 코드 문맹인데도 불구하고
영어만 알면 뭔 소린지 알 수 있는 직관적인 코드다
 
깔쌈하게 60부터 역으로 숫자를 세고 - 하나 까고- 다시 프린트 하고----------------
 
근데 틀렸다고 한다

사유, 0을 넘어서면 마이너스로 가서 끝없이 센다

recursion 에러라고

 

그래서 명확하게 끝나는 지점을 설정해줘야 에러없이 끝난다고

 

def count_down(number):
    if number < 0:         # 만약 숫자가 0보다 작다면, 빠져나가자!
        return

    print(number)          # number를 출력하고
    count_down(number - 1) # count_down 함수를 number - 1 인자를 주고 다시 호출한다!


count_down(60)

분기를 미리 만들어 주는게 중요한데 왜 미리 쓰면 바로 머리에 안들어올까

 

 

2.심?화

 

팩토리얼을 넣어보자

 

종이로 풀 땐 쉬운 팩토리얼

3! 은 3 * 2 * 1 = 6,        4! 는 4 * 3 * 2 * 1 = 4 * 3! = 24

ㅇㅇ 맞음

 

즉 n! = n(n-1)(n-2)...................1이니까

재귀함수에 걸맞다고 내준것 같다

 

def factorial(n):
    # 이 부분을 채워보세요!
    return 120


print(factorial(5))

 

주어진 코드

 

def factorial(n):
    if n <= 0:
        break
    return n * factorial(n - 1)


print(factorial(5))

라고 썼는데 틀림

사유는 SyntaxError: 'break' outside loop

검색을 하니

break for while 아래에서밖에 못 쓴다고 외우시면 될 것입니다. 그래서 "break outside loop"가 오류인 겁니다.

라고 알려준다

 

def factorial(n):
    if n <= 0:
        return 1
    return n * factorial(n - 1)


print(factorial(5))

이렇게 해봤다

답은 맞았다 

 

원 예제에서는 if n == 1:로 해결했다

훨씬 스마트해보인다

 

 

3. 회문검사

 

회문 잘안다. 우영우 놀이를 어린이들이 너무 많이 함.

 

ㅇㅇ palindrome라네요

 

검사하려면 맨 앞글자-막 글자

1번=n-1번

이카면 되겠죠?

 

홀짝 따로 구분해야하는지 불안감이 엄습하기 시작하는데

종료시점 어떻게 줄지 감이 안간다

 

input = "abcba"


def is_palindrome(string):
    return True


print(is_palindrome(input))

왜 파이참은 복붙 시 박스 주고 vs코드는 박스 안줄까

 

input = "자꾸만꿈만꾸자"


def is_palindrome(string):
    n = len(string)
    #으로 내용물 겟수 세줌,''쓰면 한 물건으로 치니 주의
    for char in range(n):
    #숫자 범위 준다,0번째 ㅜ번째 비교, 1번째 ㅜ-1번째비교라
        if string[char] != string[n - char - 1]:
            #진짜 물건이 같은지 비교후 아닐때
            return False

    return True


print(is_palindrome(input))

대충 맞았다

 

뭔가 뭔가임