2017-01-21 1 views
0

'성공'값을 기대하지만 정의되지 않습니다. 이유를 이해하지 마십시오. 조건이 충족되지 않으면 때JavaScript 재귀 함수가 반환됩니다. 정의되지 않았습니다.

var recursion = function(n) { 
 
    if (n == 0) { 
 
    console.log('yup'); 
 
    return 'success'; 
 
    } 
 
    console.log(n) 
 
    recursion(n - 1); 
 
} 
 

 
var x = recursion(10); 
 

 
console.log(x);

+0

'return recursion (n - 1); ' –

+0

흥미 롭습니다 ... 내 머리를 감싸기가 어렵습니다. 함수를 반환 할 때 함수가 다시 실행되지 않는 값을 반환 할 것이라고 기대하고 있습니다 ... –

답변

3

당신은 당신의 코드에서 return 문을 누락 return recursion(n - 1);

2

해야합니다.

var recursion = function(n) { 
 
    if (n == 0) { 
 
    console.log('yup'); 
 
    return 'success'; 
 
    } 
 
    console.log(n) 
 
    return recursion(n - 1); 
 
    //--^-- 
 
} 
 

 
var x = recursion(10); 
 

 
console.log(x);

-1

변화에 :

이미 언급했듯이
return recursion(n-1) 
0

, 당신은 재미있는 return recursion(n - 1);

필요 ... 그게 전부 주변에 내 머리를 정리하기 어렵다. 함수를 반환 할 때 함수를 반환 할 때 반환 할 값이 반환되지 않습니다.

그러나 n !== 0의 경우 함수가 아무 것도 반환하지 않습니다.

재귀는 단순한 함수 호출이며 특별한 것은 아닙니다. 루프가 break과 같지 않습니다. return 문은 함수 자체가 호출 되었기 때문에 전체 호출 스택을 통해 결과를 플러시하지 않습니다. 직접 호출자에게만 반환됩니다. 그리고 여러분의 경우 최상위 함수 호출 recursion(10)은 아무 것도 반환하지 않으므로 undefined입니다.

관련 문제