我已寫了一碼來計算長度的總和,由此創建一個有效的方式來總結
syra(1) = 1
syra(2) = n + syra(n/2) if n%2==0
syra(3) = n + (n*3) + 1
例如。
- syra(1)將產生1
- syra(2)將產生2 1
- syra(3)將產生3 10 5 16 8 4 2 1
- 長度(3)將所有syra(1),syra(2),syra的總和(3),其是11.
下面的代碼:
public static int lengths(int n) throws IllegalArgumentException{
int syra = n;
int count = 0;
int sum = 0;
if (syra < 1){
throw new IllegalArgumentException("Value must be greater than 0");
}else{
for (int i=1; i<=syra; i++){
count = i;
sum++;
while (count > 1){
if ((count % 2) == 0){
count = count/2;
sum++;
}else{
count = (count * 3) + 1;
sum++;
}
}
}
}
return sum;
}
問題是,如果我用700000的大值爆炸這些長度,它將需要很長時間並且對於已經出現在syra(3)中的syra(10),syra(5)...重複步驟。
如何微調代碼來存儲重疊序列的一些臨時(數組)?
好的,根據這些信息,這裏是我的另一個帶有數組的修改後的代碼,爲什麼它會產生數組索引超出限制的錯誤?
public class SyraLengths{
public static void main (String[]args){
lengths(3);
}
public static int lengths(int n) throws IllegalArgumentException{
int syra = n;
int count = 0;
int sum = 0;
int [] array = new int [syra+1];
array[0] = 0;
if (syra < 1){
throw new IllegalArgumentException("Value must be greater than 0");
}else{
for (int i=1; i<=syra; i++){
count = i;
sum++;
while (count > 1){
if(array[count] !=0){sum = sum + array[count];}
else if ((count % 2) == 0){
count = count/2;
array[count]=sum;
sum++;
}else{
count = (count * 3) + 1;
array[count]=sum;
sum++;
}
}
}
}return sum;
}
}
'syra(2)= n + syra(n/2)'中的'n'是什麼? –
@Hemal - 閱讀代碼。 –
謝謝,@Ed。不是數學家,我不知道什麼是Syra函數,並認爲我會根據規範檢查代碼。 –