public class EulerProblem14 {
int chainLength=1;
public int findChainLength(int number){
System.out.println("number "+number);
System.out.println("Chainlength "+chainLength);
if(number==1){
System.out.println("the number is finally 1 return chain length");
return chainLength;
}
if(number%2==0){
chainLength++;
return findChainLength(number/2);
}
else {
chainLength++;
findChainLength(number*3+1);
}
System.out.println("THIS SHOULD NOT BE EXECUTED");
return -1;
}
public static void main(String args[]){
System.out.println(new EulerProblem14().findChainLength(13));
}
在解決項目歐拉Problem 14時,我遇到了一個奇怪的問題,在我以前從未面對過的java方法返回。在上面的方法中,當數字最終爲1時,它應該返回一個鏈的數量。但這是輸入13的輸出。Java:方法返回
數13鏈長1
號40鏈長2
數20鏈長3
數10鏈長4
數5鏈長5
數16鏈長6
數8鏈長7
數4鏈長8
數2鏈長9
數1鏈長10
數爲最後1返回鏈長度
這不應該被EXECUTED
這不應該執行
-1
的問題是在最後部分時的數目變爲1,而不是返回鏈長= 10它以某種方式跳過它,並執行其中不應該被執行的代碼並返回-1。對於1,2,4,8等所有2的權力都可以正常運行,但對於其他人則不合格。
這可能是我的一個愚蠢的錯誤。儘管如此,這對我來說是一個問題。
我想你只是缺少findChainLength的第二次調用返回(在else塊中) – daveb 2012-04-18 12:40:33
使用遞歸的第一條規則是不使用遞歸。使用遞歸的第二條規則是不使用遞歸。 – Neil 2012-04-18 12:43:15