Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 验证方法-使用递归编写Java方法来确定字符串s的元音是否多于辅音_Algorithm - Fatal编程技术网

Algorithm 验证方法-使用递归编写Java方法来确定字符串s的元音是否多于辅音

Algorithm 验证方法-使用递归编写Java方法来确定字符串s的元音是否多于辅音,algorithm,Algorithm,我正在努力解决上述问题。下面是我的解决方案。感谢您的反馈/意见 public static boolean areMoreVowels(String str, int c, int v){ String vowels = "aeiou"; if(vowels.indexOf(str.charAt(0))>=0){ v++; }else{ c++; } if(str.length()==1){ ret

我正在努力解决上述问题。下面是我的解决方案。感谢您的反馈/意见

public static boolean areMoreVowels(String str, int c, int v){
    String vowels = "aeiou";

    if(vowels.indexOf(str.charAt(0))>=0){
        v++;
    }else{
        c++;
    }

    if(str.length()==1){
        return v > c;   
    }

    return areMoreVowels(str.substring(1), c, v);

}

public static void main(String[] args) {
    System.out.println(areMoreVowels("aeiouttrrrrr", 0, 0));
}

我觉得你的代码没问题!但如果你想换一种方式,另一个想法可能是

Int areMoreVowels(string str, int pos)
    if  pos == str.length()
        return 0
    k = areMoreVowels(str, pos+1)
    if str[pos] == Vowel()
        return k + 1
    return k - 1

main()
    if areMoreVowels("aeiouttrrrrr", 0) > 0 
        print "Yes"
    else
        print "No"

就我个人而言,为了简单起见,我将其分为两个独立的问题:

  • 计算元音
  • 验证元音数是否大于元音数
大致如下:

count_vowels(str, p):
    if p == len(str) return 0

    return count_vowels(str, p + 1) + (is_vowel(str[p]) ? 1 : 0)

more_vowels(str):
    return count_vowels(str, 0) > (len(str) / 2)

为每个方法指定一个简单的目的通常比创建一个条件结构将单独的功能压缩到一个方法中更好。

您的方法很好。我不知道您是否意识到这一点,但您使用了在某些语言(如Scala)中非常重要的方法,可以减少堆栈溢出的机会。你的方法已经返回你的答案,我认为是一个优势。 可以考虑减少变量的数量:

public static boolean areMoreVowels(String str, int v){
  String vowels = "aeiou"; //do you consider 'y' as a vovel?

  if (vowels.indexOf(str.charAt(0)) >= 0) {
    v++;
  } else {
    v--;
  }

  if (str.length() == 1) {
    return v > 0;
  }

  return areMoreVowels(str.substring(1), v);
}

public static void main(String[] args) {
    System.out.println(areMoreVowels("aeiouttrrrrr", 0, 0));
}

你有问题吗?这不管用吗?这不是一个真正的“代码审查”网站。我不喜欢我第一次调用函数的方式。我的问题是,有没有更好的方法来解决这个问题?我不明白为什么要使用递归来解决这个问题。一个简单的for循环应该足够容易。@smead-因为问题是这样说的。那么这是一个愚蠢的问题。有更好的方法来学习递归。如果你写的东西行得通,我不会浪费你的时间去完善它:)谢谢你的回复。我也会检查你的方法。这是用Python写的吗?好建议。谢谢