簡體   English   中英

我應該如何遞歸編寫此Java函數?

[英]How should I write this Java function recursively?

我正在嘗試遞歸編寫以下Java代碼:

public static int count(String word) {
    int numValue = 0;
    int length = word.length();
    for(int i=0; i<length; i++){
        String alpha = "abcdefghijklmnopqrstuvwxyz";
        String letter = (word.substring(0 + i,1 + i));
        numValue = numValue + alpha.indexOf(letter) + 1;
    }
    return numValue;
    }


public static void main(String[] args) {
    System.out.println(count("abc"));
}

該函數返回輸入字符串參數中每個字母的索引總和。

我正在嘗試遞歸地編寫相同的代碼,有人可以指出我哪里出錯了嗎?

public static int count(int numValue, int i, String word) {
    String alpha = "abcdefghijklmnopqrstuvwxyz";
    if( i >= word.length()){
        return numValue;
    }
    else{
        String letter = (word.substring(0 + i,1 + i));
        numValue = numValue + alpha.indexOf(letter) + 1;
        count(numValue, i=i+1, word);
    }
    return numValue;
}

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

一個更簡單的方法是一次又一次地收縮字符串。

public static int count(String word) {
    if (word.isEmpty()) {
        return 0;
    }
    final String alpha = "abcdefghijklmnopqrstuvwxyz";
    return alpha.indexOf(word.charAt(0)) + count(word.substring(1));
}

要將此函數更改為遞歸,最好使用分而治之的方法,該方法很容易實現。 我將以簡單詳細的方式進行介紹,以便您可以清楚地看到這些步驟。

public static int count(String word) {
    int numValue = 0;
    int length = word.length();
    if(length > 1)
    {
        String substring1 = word.substring(0, length/2);
        String substring2 = word.subtring(length/2 + 1, length);
        numValue += count(substring1);
        numValue += count(substring2);
        return numValue;
    }
    else 
    {
        String alpha = "abcdefghijklmnopqrstuvwxyz";
        return alpha.indexOf(word) + 1;
    }
}

public static void main(String[] args) {
    System.out.println(count("abc"));
}

我想您正在這樣做,目的是要教自己遞歸-如果不是,您可能想考慮僅使用迭代方法而不是遞歸對您是否更好。

變量numValue的類型為int 因此,它不會在調用方法中更改,而是將其傳遞給另一個方法並在那里進行更改。 這意味着,行count(numValue, i=i+1, word); 基本上什么也沒做。

您可以通過返回遞歸調用的結果來更正該方法(因為您返回了ifelse不需要else ):

public static int count(int numValue, int i, String word) {
    String alpha = "abcdefghijklmnopqrstuvwxyz";
    if( i >= word.length()){
        return numValue;
    }
    String letter = (word.substring(0 + i,1 + i));
    numValue = numValue + alpha.indexOf(letter) + 1;
    return count(numValue, i=i+1, word);
}

這就是為什么您的功能無法正常工作的原因。 timrau提供的答案是一個更好的遞歸解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM