def my_factorial(n):
if(n > 1):
return n * my_factorial(n - 1)
else:
return 1
팩토리얼 함수 코드
def dfs(x):
global check
check[x] = True
for y in a[x]:
if check[y] == False:
dfs(y)
간선 찾기 할 때, dfs 코드
둘다 재귀를 사용해서 함수 작성한건데
팩토리얼 코드에서
return n * my_factorial(n - 1)
에서 return을 없애고 그냥 n * my_factorial(n - 1)
이렇게만 쓰면 오류나고
dfs코드에서 마지막줄에 dfs(y)
여기에 return 붙여서
return dfs(y)
이렇게 쓰면 오류남
똑같은 재귀인데 왜 어떤건 return 붙이면 오류나고 어떤건 안붙이면 오류나는지 ㅈㄴ이해 안가..
return이 함수 종료를 명시적으로 나타내는건 알고있는데 그 이상 다른 뜻이 있는거야?ㅜ
dfs에서는 리턴값을 사용안하고 팩토리얼에서는 n * 함수리턴값 을 해야하는데 n이 1까지 갔을때는 1을 리턴해서 n * 1을 했겠지만 그 전 스택인 n * 함수리턴값은 이 앞에서 리턴을 안했기 때문에 계산을 할수가 없음
쉽게 보여주자면 n이 5라고 가정하고 5 * (5 - 1 함수) -> 4 * (4 - 1 함수) -> 3 * (3 - 1 함수) -> 2 * (2 - 1 함수) -> 1 * else로 인해 1 반환 -> 이후 스택이 풀리면서 계산이 되야하는데 return을 없앴기 때문에 1 * 1의 값이 공중분해됨 그러면서 2 * (2 - 1 함수) 여기 스택에 있는 계산식은 계산을 할 수가 없음 2 * (리턴값 없음) 여기서 오류가 터지는거
설명 고마워 혹시 dfs에서는 왜 사용안해도 되는지 알려줄 수 있을까
팩토리얼에서는 함수에서 계산한 값을 연쇄적으로 return으로 반환해야해서 필요하다 ! 이해했음
리턴은 함수값 돌려주는거임