2017-03-15 2 views
-1

파이썬에서 곱하기 재귀 (컨테이너의 모든 값 곱하기)를 시도하고 있습니다. 함수는 목록의 요소를 위치 인수 (* n)로받습니다. 실행시 "최대 재귀 깊이에 도달했습니다"라는 오류 메시지가 나타납니다. 그러나 단순히 * n 대신 n을 사용하고 목록의 요소를 보내면 코드가 제대로 작동합니다.재귀가 위치 지정 인수로 작동하지 않습니다.

코드 작동하지 :

def multiply(*n): 
    if n:  
     return n[0]*multiply(n[1:]) 
    else: 
     return 1 

multiply(5,1,4,9) 

근무 코드 :

def multiply(n): 
    if n:  
     return n[0]*multiply(n[1:]) 
    else: 
     return 1 

multiply([5,1,4,9]) 

답변

0

을 코드의 첫 번째 부분에서,

multiply(n[1:])

는 하나 개의 인수 multiply를 호출하는 식을 . 즉, 목록의 나머지 부분. 목록 n[1:]의 내용과 동일한 인수를 호출하려면, 당신과 같이 다시 플랫 연산자를 사용

multiply(*n[1:])

0

당신이 *n에 위치 인수의 임의의 수를 예상하는 함수를 말할 때 , 당신은 그 형식으로 그것을 수용 할 필요가있다 : 모든 인수를 포함하는 하나의 반복 가능한 것이 아니라, 다중 인수를 가진다. 요소를 인수로 사용해야하는 단일 iterable이있는 경우에는 호출 할 때 *으로 압축을 풀어야합니다. 두 번째 함수는 반복 가능한 단일 인수를 기대하기 때문에 작동하며 하나의 반복 가능한 인수를 전달합니다.

n[1:]*n[1:]으로 바꿉니다.