2017-03-03 4 views
-2

나는 약간의 재귀 이해에 어려움을 겪고 있기 때문에 어떤 도움이나 이해라도 높이 평가할 수있다. 두 개의 숫자가 곱해질 코드를 작성하려고합니다. 두 개의 초기 함수를 제외하고는 NO (*, + 또는 -) 연산자가 사용되어야합니다 ( 참조). 이것들은 n_2의 값까지 1을 n_2 배까지 더하는 데 사용됩니다.곱셈 회귀

예 : 3 + 4> 3 + 1 + 1 + 1 다음 앞의 두 기능에 다시 호출하는 추가 기능을 할 필요가있다 + 1 = 7

n = int(input()) 
n_2 = int(input()) 

def inc(n): 
    return n + 1 

def dec(n): 
    return n - 1 

, 다시는 사용할 수 없습니다를 (*, + 또는 -). 그런 다음이 add 함수를 사용하여 add 함수를 사용하여 기본적으로 n을 n_2만큼 추가하여 별도의 함수에서 숫자를 "곱"합니다.

감사합니다.

업데이트 : 사람들이 숙제 답변/속임수를 요청하고 있습니다. 나는 이것이 재귀를 이해하고 어려운 문제에 도움을 청할 것을 요구하고있다. 당신은 전체 코드의 문제에 대한 답을 필요로하지 않고, 주제를 이해하는 데 도움이되는 도움의 손길을 요구합니다. 재귀가 문제에 대한 지침과 함께 일반적으로 어떻게 작동하는지 구체적으로 설명합니다. 문제는 재귀를 사용하여 해결하려는 문제의 예입니다.

+1

자신 만의 숙제를하십시오. 아니면 대학에서 친구를 속여서 속일 수 있습니다. –

+0

다른 사람들에게 그렇게하도록 요청하는 것보다 더 많은 것을 배울 수 있습니다. –

+0

먼저 솔루션에 대해 생각해보십시오. – jtitusj

답변

0

개념으로 재귀하는 데 익숙하지 않은 경우 도구를 사용하여 반복적 인 솔루션을 시작하는 것이 좋습니다. 당신은 이미 당신이 표현할 수 있다는 것을 깨달았다 3 + 4와 같은 3 + 1 + 1 + 1 + 1, 파이썬에서 그 루프 사용하는 것입니다 작성하는 한 가지 방법 : 이제

def iterative_add(n, n_2): 
    for _ in range(n_2): 
     n = inc(n) 
    return n 

을, 우리는 설정해야합니다 이것은 재귀적인 해결책으로 재귀 적 솔루션의 특성을 정의하는 것은 무언가를 반복해야 할 횟수를 알아내는 대신 문제의 일부를 수행하고 은 다시으로 전화하여 나머지 작업을 수행한다는 것입니다. 여기, 우리가 할 수있는 명백한 조금 한 번 inc를 호출하는 것입니다, 그리고 우리는 inc 다음을 다시 같은 함수를 호출 - 그래서 우리는이 같은 시작 :

def recursive_add(n, n_2): 
    return recursive_add(inc(n), n_2) 

이 분명 영원히 계속됩니다 그래서 우리는 어떻게 멈추라 고 말 할까 생각할 필요가 있습니다. 반복 버전에서는 inc을 정확히 n_2 번 호출했을 때 멈추지 만 여기에서는 호출 횟수를 추적 할 분명한 방법이 없습니다. 한 가지 좋은 방법은 고장 3 + 4 = 3 + 1 + 1 + 1 + 1에 대해 생각하고 첫 번째 1을 추가하면 나머지 문제는 (3 + 1) + (1 + 1 + 1)) = 4 + 3이다. 따라서 우리는 매번 n_2을 감소시키고 오른쪽 괄호에서 각 단계에서 왼쪽으로 '1'을 이동시켜 다음 ((3 + 1) +1) + (1 + 1)이되도록합니다. 오른 손잡이 괄호가 비어 있으면 멈출 수 있습니다.

파이썬에서

, 우리는이를 작성할 수 있습니다

def recursive_add(n, n_2): 
    if n_2 == 0: 
     return n 
    return recursive_add(inc(n), dec(n_2)) 

을 그것은 방식 재귀 작동 식 ((((3 + 1) +1) +1 "을 구축"할 것을 주목할 필요가있다) +1)을 단계별로 적용한 다음 가장 안쪽 괄호 밖으로 평가를 시작합니다. 당신이 그 개념을 돌아서 감쌀 수 있다면, 같은 방식으로 재귀 적 곱셈 해법을 쉽게 작성할 수 있어야합니다.

+0

감사합니다 !!! 정확히 내가 찾고 있던 것, 다른 온라인 예제보다 훨씬 이해하기 쉽습니다. 이것은 많은 도움이됩니다 !! 다시 한번 감사드립니다! – BorutoUzumaki