파이썬 재귀함수 팩토리얼 값

조회수 367회
def fact(n):
    if n==1:
        print('fact (',n,') 함수호출! ')
        return 1,print('fact (',n,')값 ',1,'반환')
    else:
        print('fact (',n,') 함수호출!! ')
        return n*fact(n-1),print('fact (',n,')값 반환')

def ckeck(n):
    if n==1:
        return 1
    else:
        return n*ckeck(n-1)

a=int(input('정수를 입력하세요: '))
fact(a)

print(a,'의 팩토리얼 값은',ckeck(a),'입니다')

이렇게 코드를 짲는데

fact ( 3 ) 함수호출!! 
fact ( 2 ) 함수호출!! 
fact ( 1 ) 함수호출! 
fact ( 1 )값  1 반환
fact ( 2 )값 2반환
fact ( 3 )값 6 반환
3 의 팩토리얼 값은 6 입니다

이렇게 출력하고 싶습니다. 도와주세요 도저히 값 반환 사이에 뭘 넣어야 할지 모르겠어요. 고수님들 도와주세요.

  • 자기 답을 얻었다고 질문을 지우려하지 마세요! nowp 2022.7.1 10:26

1 답변

  • def fact(n):
        if n==1:
            print('fact (',n,') 함수호출! ')
            r = 1
            print('fact (',n,')값 ',r,'반환')
            return r
        else:
            print('fact (',n,') 함수호출!! ')
            r = n*fact(n-1)
            print('fact (',n,')값 ',r,'반환')
            return r
    
    def ckeck(n):
        if n==1:
            return 1
        else:
            return n*ckeck(n-1)
    
    #a=int(input('정수를 입력하세요: '))
    a = 3
    fact(a)
    
    print(a,'의 팩토리얼 값은',ckeck(a),'입니다')
    

    데코레이터를 이용한 방법.

    def fact_decorator(f):
        def fact_dec(n):
            print(f"fact ({n}) 함수호출!")
            r = f(n)
            print(f"fact ({n}) 값 {r} 반환")
            return r
    
        return fact_dec
    
    
    @fact_decorator
    def fact(n):
        if n == 1:
            return 1
        else:
            return n * fact(n - 1)
    
    
    # a=int(input('정수를 입력하세요: '))
    a = 3
    r = fact(a)
    
    print(a, "의 팩토리얼 값은", r, "입니다")
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)