재귀 함수
다른 언어에는 for, while 및 기타 루프가 있기 때문에 Erlang은 재귀 함수를 자주 사용합니다. Erlang에서는 재귀 함수로 이를 수행합니다.
예시:
-module(recursive).
-export([sum/1]).
sum([]) ->
0;
sum([Head | Tail]) ->
Head + sum(Tail).
여기서 우리는 정수 목록을 가져와 요약하는 sum 함수를 수행합니다.
15> recursive:sum([1,2,3]).
6
함수를 호출하면 어떻게 될까요?
Erlang의 일은 코드의 맨 위에서 맨 아래로 이동하는 방식으로 작동합니다.
재귀:합([1,2,3]). 인수 [1,2,3]으로 이 함수를 호출하면 이런 일이 발생합니다.
sum([]) ->
0;
sum([1 | [2,3]]) ->
1 + sum([2,3]).
먼저 첫 번째 함수 절을 치고 목록에 세 개의 요소가 포함되어 있기 때문에 다음 함수 절로 넘어갑니다. 여기서 목록의 머리는 1이 되고 꼬리는 두 개의 요소가 있는 목록이 됩니다[2,3].
함수 sum을 다시 호출하지만 이제 꼬리가 있는 재귀 호출은 우리에게 줄 것입니다.
sum([]) ->
0;
sum([2 | [3]]) ->
2 + sum([3]).
우리는 또한 목록의 마지막 요소로 이를 수행합니다.
sum([]) ->
0;
sum([3 | []]) ->
3 + sum([]).
여기서 마지막 호출은 기본 케이스에 도달하고 0을 반환합니다.
이렇게 하면 3 + 2 + 1 + 0(기본 사례) = 6이 계산됩니다.
꼬리 재귀를 사용하여 이 작업을 수행할 수도 있으므로 재귀 결과를 다음으로 전달할 수 있습니다.
sum([], Sum) ->
Sum;
sum([Head | Tail], Sum) ->
sum(Tail, Sum + Head).
이것은 꼬리 재귀를 사용하는 우리의 기능입니다. 여기서 일어날 일은 우리가 위에서 했던 것과 매우 유사합니다. 지금과 다른 점은 재귀 단계에서 덧셈을 수행하고 그 결과를 다음 재귀로 보내는 것입니다. 기본 케이스에 도달하면 결과를 반환합니다.
16> c(recursive).
{ok,recursive}
17> recursive:sum([1,2,3], 0).
6
이제 aritry 2가 있는 sum이라는 함수를 만들었습니다. 정수와 시작 값이 포함된 목록을 사용합니다.
sum([], Sum) ->
Sum;
sum([1 | [2,3]], 0) ->
sum([2,3], 0 + 1).
sum([], Sum) ->
Sum;
sum([2 | [3]], 1) ->
sum([3], 1 + 2).
sum([], Sum) ->
Sum;
sum([3 | []], 3) ->
sum([], 3 + 3).
sum([], 6) ->
6;
sum([Head | Tail], Sum) ->
sum(Tail, Sum + Head).
기본 사례에 도달하고 목록이 비어 있으면 이 경우 6인 변수 Sum을 반환합니다.
Reference
이 문제에 관하여(재귀 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/taure/recursive-functions-5c4f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)