2017-06-26 45 views
-2

我的作業是返回給定的數字是奇數還是偶數(布爾值),使用遞歸函數:true爲偶數,而false爲奇數。我已經結束了兩個類似的功能。甚至使用遞歸的奇數

我的問題是,一個函數總是返回true,其他總是返回false

下面的代碼給出true爲任意數量的

function t(n){ 
    if (n=2){ 
     return true; 
    } 
    else if (n=1){ 
     return false; 
    } 
    else{ 
     return n-t(n-2); 
    } 
} 


console.log(t(3)); 
// true 

下面的代碼給出了false爲任意數量的

function t(n){ 
    if (n=0){ 
     return true; 
    } 
    else if (n=1){ 
     return false; 
    } 
    else{ 
     return n-t(n-2); 
    } 
} 


console.log(t(3)); 
// false 
+5

'='不適合比較... – Teemu

+0

爲什麼你需要這個? –

+0

@CarlosFranco因爲他的老師當然要他寫。 – mpen

回答

1

在你的代碼的主要問題是

  • 你測試的任務,n=1。比較操作將是n == 1
  • 你的遞歸情況下,使無效操作:

    返回正T(N-2)

n是整數; t的返回值是布爾值(據推測)。對於n = 4的簡單情況,你打算返回什麼?你再次打電話t(2)。這返回true,所以您以前的調用現在評估4-true並返回該值。這不太可能是你想要的。

修復if條件。將遞歸調用更改爲僅t(n-2)。 如果遇到更多麻煩,請嘗試插入一些策略性地位 - 將print語句用於跟蹤執行路徑和一個或兩個重要值。

3

這樣做的一般方法是從你的價值中扣除2每個遞歸水平。

這樣,遞歸基本情況將是這樣,如果:

一個),我們達到0,數量是偶數

b)中,我們達到1,個數爲奇數。

這裏是僞代碼:

evenOrOdd(number) { 
    if number equals 0 
    return 'even' 
    if number equals 1 
    return 'odd' 
    return evenOrOdd(number - 2); 
} 

注:這僅適用於正數。對於負數,你會做加法而不是減法。

+1

我要說......如果'數字'是負數,這將會發生炸彈:-) – mpen

+1

這個想法是指向正確的方向,沒有明確解決他們的硬件:) – nem035

+0

如果您與該部門的其他人員進行比較,請解決負數問題 –

1

您應該將if條件中的賦值等號替換爲比較等號。如果你的函數返回一個布爾值,你不能用函數的結果減去n變量,因爲它們分別是一個Integer和一個布爾值。我希望我幫你一把。