내배캠 TIL 11일차 (재귀함수)
모두가 앓는 소리를 내는 재귀함수
저도 경험해 보겠씁니다
자기자신을 호출하는 함수를 재귀함수라 한다
말만 들으면 일반적인 논리로는 왜 쓰는지 이해할 수가 없다
이미 있잖아, 어캐 또 부름
1. 기초
주어진 예제는 보신각 카운트 다운
사유, 0을 넘어서면 마이너스로 가서 끝없이 센다
recursion 에러라고
그래서 명확하게 끝나는 지점을 설정해줘야 에러없이 끝난다고
분기를 미리 만들어 주는게 중요한데 왜 미리 쓰면 바로 머리에 안들어올까
2.심?화
팩토리얼을 넣어보자
종이로 풀 땐 쉬운 팩토리얼
3! 은 3 * 2 * 1 = 6, 4! 는 4 * 3 * 2 * 1 = 4 * 3! = 24
ㅇㅇ 맞음
즉 n! = n(n-1)(n-2)...................1이니까
재귀함수에 걸맞다고 내준것 같다
주어진 코드
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))
대충 맞았다
뭔가 뭔가임