2016-04-05 34 views
1

Bu işlev neden yeniden tanımlanmadı acaba? Herhangi biri benim için açıklayabilir mi?Recursion return undefined yerine true

function isEven(i) { 
    if (i === 0) { 
    return true; 
    } else if (i == 1) { 
    return false; 
    } else { 
    console.log(i); 
    isEven(i - 2); 
    } 
} 
console.log(isEven(6)); 
+3

'ISEVEN geri olacak bir kısa (i - 2) ', eksik' –

+1

'% 6 return' 2 = == 0 'bir numarayı kontrol etmek için yeterli olmaz mı? –

cevap

7

Başka bir ifade üzerinde geri dönmiyorsunuz. JavaScript'te, tüm işlevler bir şey döndürmelidir, böylece bir iade ifadesi girmeyi unutursanız, tanımsız olarak geri dönecektir.

function isEven(i){ return i%2===0; } 
1

//You should return value to expect output 
 

 
function isEven(i) { 
 
    if (i === 0) { 
 
    return true; 
 
    } else if (i == 1) { 
 
    return false; 
 
    } else { 
 
    console.log(i); 
 
    return isEven(i - 2); 
 
    } 
 
} 
 

 
console.log(isEven(5))

4

Eğer bu çok ile basitleştirmek olabilir n sonunda, else gerekli değildir, çünkü geri dönüş işlev sürekliliğini sona erdirir.

function isEven(i) { 
 
    if (i === 0) { 
 
     return true; 
 
    } 
 
    if (i == 1) { 
 
     return false; 
 
    } 
 
    document.write(i + '<br>'); 
 
    return isEven(i - 2); 
 
} 
 
document.write(isEven(6));

function isEven(i) { 
 
    return !(i & 1); 
 
} 
 
document.write(isEven(5));

+1

Bu yöntemin biliyorum, ama ben yinelenen özdeyiş sözdizim :) – meks

1

Ya retur ile daha özlü tarzı ile:

} else { 
    console.log(i); 
    isEven(i - 2) 
} 

olmalıdır

} else { 
    console.log(i); 
    return isEven(i - 2); 
} 
+0

bu kod nasıl çalışır? 'işlevi ISEVEN (i) { dönüş (i & 1); !} document.write (ISEVEN (5));.' – meks

+0

@meks bunun nedeni ve * ('&') Bu işleri * bit operatörünü kullanır çift ​​sayılar 1 için bir bit, en sağ bit, '&' ile, eşit olmayan sayılarla 1 elde edersiniz ve hatta 0. sayıları için, bu istenen değil, yani operatör değil! lütfen bir göz atın [burada] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) –

İlgili konular