私は、線形再帰を使用して配列に要素を追加するJavaプログラムを作成しました。得られた出力は期待通りではありません。誰でもこのプログラムの何が間違っているのを指摘できますか?私は6として出力を期待したが得られていリニア再帰はどのように機能しますか?
public class TestSum {
public int count = 0;
public int sum(int[] a){
count++;
if(a.length == count){
return a[count -1];
}
return sum(a) + a[count -1] ;
}
public static void main(String[] args) {
int[] a = {1,2,3};
int val = new TestSum().sum(a);
System.out.println(val);
}
}
はです。なにが問題ですか?
奇妙なことに、追加の順序を変更すると、return a[count -1] + sum(a);
となり、出力はとなります。
"私は、加算の順番を変えると、[count -1] + sum(a)を返しても、それは6として出力されます。なぜあなたはそれを奇妙なものにしていますか? – bradimus
追加の順番を変えるだけで、出力が変わるので変です。私は2 +3が3 + 2と同じであることを意味します。私は再帰についての私の理解が間違っていて、同じことを理解しようとしています。 – user001
ここでは定数を追加していません。 'sum(a)'は 'count'の値を変更し、' a [count-1] 'を変更します。 – bradimus