2013-06-10 9 views
-2
oops :: Integer -> Integer -> Integer 
oops a b 
    | a == 0 = b 
    | otherwise = oops (a - 1) (b + 1) 

oopser :: Integer -> Integer -> Integer 
oopser a b 
    | a == b = b 
    | otherwise = oopser (a + 1) (b - 1) 

값 a와 b는 위의 두 함수가 종료됩니까? 함수가 종료되면 a 및 b에 대한 값과 관련하여 반환되는 값은 무엇입니까? (두 함수에 대한 질문에 대답하는 것) ...함수가 종료 될 때

프로그래밍에서 우리는 실제로 어떻게 'Terminate'라는 단어를 정의합니까 ??

+0

계산을 프로세스로 보면 시작을 식별 할 수 있고 끝을 식별 할 수 있습니다. 끝까지 도달하면 종료라고 부릅니다. 계산식을 부분 함수로 보면 해지는 정의에 불과합니다. –

답변

2

비 종료는 함수를 호출하고 그 함수가 결코 값을 반환하지 않으며 영원히 기다릴 것을 의미합니다. 이제 당신은 영원을 결정할 수 있습니다;).

두 가지 함수는 재귀 함수이며 재귀 함수가 종료되는지 여부를 확인하는 것은 "기본 조건"(즉 재귀 함수가 자체를 호출하지 않는 조건) 만난 적 없어요.

oops에서 기본 조건은 다음의 기본 조건을 충족하지 않습니다이 기능에 -1로 (또는 무엇이든 부정적) 통과 따라서 종료 결코 그래서 만약 a == 0 및 재귀 A의이 감소된다. 양수 또는 0 인 a에 대해 종료됩니다.

마찬가지로 oopser에서 값이 큰 값을 전달하면 b는 종료되지 않습니다. b보다 작은 값을 전달하거나 둘 다 같으면 종료됩니다.

+0

나는 조금 혼란 스럽다. 왜냐하면 종료 함수는 결코 "절대적으로"에서 valus를 반환하지 않는다는 뜻이다. -1로 (또는 어떤 것이 부정적 이라든)이 함수에 전달하면 기본 조건을 결코 충족시키지 못할 것이다. 그것은 ** 결코 ** 종결 될 수 있는가 ??? – PeAcE

+0

정확히 말하면 결코 종료되지 않습니다. –

+0

@PeAcE : – Ankur

관련 문제