2016-09-19 2 views
-4

그래서 우리는 * 기호 (또는 다른 곱셈 형식)를 사용하지 않고 정수 (n, m)를 곱하는 것으로 가정되는 파이썬 프로그래밍 클래스를 숙제로 삼습니다. 우리는 재귀를 사용하여이 문제를 해결하기로되어 있으므로 n을 m 번 추가하면됩니다. 내 문제는 재귀 자체를 사용하는 것입니다 생각합니다. 재귀 사용, 결과에 대한 인터넷 검색했습니다. 여기 내 코드가있다. 누군가가 올바른 방향으로 나를 가리킬 수 있을까요?재귀를 사용하여 * 부호없이 어떻게 번식합니까?

def mult(n,m): 
     """ mult outputs the product of two integers n and m 
      input: any numbers 
     """ 
     if m > 0: 
      return n + n 
      return m - 1 
     else: 
      return 1 
+7

힌트 : 일반적으로, 재귀는 코드 경로 중 적어도 하나에 _itself_ 호출하는 기능을 포함한다. – mgilson

+5

기본 케이스와 재귀 케이스의 곱셈을 정의하십시오. 재귀 적 케이스는'n + mult (n, m - 1)'이므로 n과 n의 곱셈에 n이 더해진다. m'에서 1을 뺀다. –

+1

[파이썬에서 재귀 함수 만들기] (http://stackoverflow.com/questions/479343/how-can-i-build-a-recursive-function-in-python) 또는 그것의 링크 된 질문 [파이썬에서 재귀의 기초] (0120-13755) – JGreenwell

답변

1

그래서 대신 잘하면 내가 :-) 함께 당신을 도울 수 재귀의 예를 제공 할 수있는 당신이 여기에 당신의 숙제에 대한 답을주고 싶지 않습니다.

# Here we define a normal function in python 
def count_down(val): 
    # Next we do some logic, in this case print the value 
    print(val) 

    # Now we check for some kind of "exit" condition. In our 
    # case we want the value to be greater than 1. If our value 
    # is less than one we do nothing, otherwise we call ourself 
    # with a new, different value. 
    if val > 1: 
     count_down(val-1) 

count_down(5) 

현재 어떻게 작업하고 있습니까? 아마도 무언가를 인쇄하는 대신 무언가를 돌려 줄 수 있습니다 ...

0

당신은 올바른 기술을 가지고 있지만 검색에서 찾은 기본 사항을 내부화하지 않았습니다. 재귀 함수는 일반적으로 두 가지 경우로 나뉩니다.

  1. 기본 사례 - 완료되면 어떻게 알 수 있습니까? 그 시점에서 당신은 무엇을하고 싶습니까?

여기에서 승수가 0 일 때의 기본 케이스를 알았습니다. 지금 무엇을 반환하겠습니까? 추가 프로세스로 이것을 수행하고 있음을 기억하십시오. 추가 요소 요소를 이 아닌 곱셈 이 아닌 것으로 생각합니다.

  1. 재귀 사례 - 문제를 단순화하기 위해 사소한 작업을 수행 한 다음이 단순화 된 버전으로 재발행하십시오.

여기서 합계를 높이고 배율을 1 줄이려는 것으로 알고 있습니다. 그러나 함수를 다시 호출하지 않았습니다. 누적 합계를 적절하게 향상시키지 않았습니다. 당신은 피승수를 두 배로 늘 렸습니다. 또한 재귀에 대해 혼란스러워하고 있습니다. return은이 함수를 호출 한 모든 항목으로 돌아갈 것입니다. 재귀에 대해서는 다음과 같은 것을 원할 것입니다.

mult(n, m-1) 

이제 함수임을 기억하십시오. 값을 반환합니다. 자,이 값으로 무엇을해야합니까? 예를 들어, 4 * 3을 계산하려는 경우 위의 문은 4 * 2의 값을 제공합니다.이 값으로 무엇을 할 것인가? 그러면 4 * 3의 올바른 값을 호출 할 수 있습니다. 예? 당신은 당신이 [...] 자리를 입력해야

result = mult(n, m-1) 
return [...] result 

... 같은 것을 할 것입니다. 원하는 경우이 코드를 단일 코드 행에 결합 할 수 있습니다. 나는 너를 더 쉽게 만들려고 노력하고있다.

0

고마워, 알아 냈어! 1 대신 1을 반환해야합니다. 그렇지 않으면 응답은 항상 우리가 원하는 것보다 하나 더 높습니다. 나는 내가 놓친 주된 기능인 함수를 어떻게 호출해야하는지 이해합니다. 는 여기에 내가했던 일이야 :

def mult(n,m): 
     """ mult outputs the product of two integers n and m 
      input: any numbers 
     """ 
     if m == 0: 
      return 0 
     else: 
      return n + mult(n, m - 1)