2017-12-24 22 views
0
public static boolean array6(int[] nums, int index) { 
    if(nums.length > index+1) 
    { 
     if(nums[index] == 6) 
      return true; 
     else 
      array6(nums,index+1); 
    } 
    else if(nums.length==index+1) 
    { 
     if(nums[index] == 6) 
      return true; 
     else 
      return false; 
    } 
    return false; 
} 

CSAクラスの練習の一環として、6がint配列に存在するかどうかを調べ、対応するブール値を返すメソッドを記述する必要があります。私が書いた方法は、配列の最初の数字が6の場合に機能しますが、それ以外の場合は機能しません。どうして?再帰的な問題のトラブル

注:この問題は、あなたがどこにもあなたのコード内で使用すると、メソッド自体の結果を返すされていないので、再帰を発射していないということである再帰的

答えて

1

行う必要があります。条件がtrueであれば、以下のように実行されるif statementの内容を書き換えることを目的として、それが仕事になるだろう:

if (nums.length > index_next) 
{ 
    if (nums[index] == 6) 
     return true; 

    // you have to return the result of the function here 
    // in order to obtain an effective recursion, otherwise the 
    // method is called but it's output value is ignored and the 
    // functions goes outside the scope of the if statement 
    // reaching the "return false" located at the bottom 
    return array6(nums, index_next); 
} 

しかし、全体的に、あなたの関数は、多くの問題を含んでいます。あなたの仕事はとてもシンプルですが、非常に複雑な方法でコーディングしています。そこには、同じ結果を達成するために使用することができます組み込み関数がたくさんあり...そしてあなたがそれらを使用しない場合でも、簡単なfor loopは仕事だろう:

boolean found = false; 

for (int i = 0; i < nums.length; ++i) 
{ 
    if (nums[i] == 6) 
    { 
     found = true; 
     break; 
    } 
} 

EDITを:RECURSIVE実装

public static boolean array6(int[] nums, int index) 
{ 
    if (index == nums.length) 
     return false; 

    if (nums[index] == 6) 
     return true; 

    return array6(nums, index + 1); 
} 
+0

はそれが私が –

+0

をMB再帰的に行われなければならなかったことを言及するのを忘れてしまいました再帰的な実装を提供するために私の答えを編集:) –

0

コンパクトなソリューション

bool array6(int* array, int len, int index) { 

    if (index == len) { 
     return false; 
    } 

    return array[index] == 6 || array6(array, len, index + 1); 

}