2017-12-03 8 views
0

私は負の数を配列に数えるコードを書いたので、今度は再帰手法を使って同じコードを書く必要があります。私は再帰的に新しいので、私はこのコードで正しい軌道にいるかどうか分からない。再帰的なコードの再帰を使用して配列のネガティブ数を数えますか?

public int countNeg (int[ ] nums, int n) 
{ 
    int neg = 0; 
    for (int index = 0; index < n; index ++) 
     if (nums[index] < 0) 
      neg++; 
    return neg; 
} 

、これは私がやったことです:

public int countNeg (int[ ] nums, int n) 
{ 
    if (n < 0) 
     return 0; 
    else { 
     int neg = countNeg (nums, n-1); 
     if (nums[n-1] < 0) 
      return neg + 1; 
     else 
      return neg; 
     } 
} 
+4

はあなたがそれをテストしていますか?何かエラーがありますか?それは働いていないのですか? (それはn = 0を除いて動作するはずです) – phflack

+0

何が問題なのですか? – Mureinik

+0

@mureinikこれは再帰手法を使用した初めてのことで、コードが正しかったかどうかわからず、配列内の負の数を数えるタスクを実行しています –

答えて

1

nが指標であるパラメータです。

int numberOfNegativeNumbers = countNeg(nums, 0); 

方法:Bilghenの答え@

public int countNeg (int[ ] nums, int n) { 
    if(n >= nums.length) 
    return 0; 
    else 
    return ((mums[n] < 0) ? 1 : 0) + countNeg(nums, n+1); 
} 
0

は、すでに必要なソリューションを提供し あなたは下の方法を使用することができます。

ただし、Tail Recursion技術を使用するソリューションを提供します。

public int countNeg (int[ ] nums, int index) { 
    return countNegTailRecur(nums, index, 0); 
} 

public int countNegTailRecur (int[ ] nums, int index, int total) { 
    if(index >= nums.length) 
    return total; 
    else 
    return countNeg(nums, index+1, nums[index] < 0 ? total + 1 : total); 
} 

ので、同じようにそれを呼び出す -

int numberOfNegativeNumbers = countNeg(nums, 0); 
関連する問題