package test.面試題; public class Test7 { public static void main(String[] args){ /** 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ... 規律: 每一行的最後一列和第一列都為1 從第三行開始每一行的第二位到倒數第二位是上一列的前一列和本列的和 */ /*第一種方法 int[][] arr=new int[6][6]; for(int i=0;i<arr.length;i++){ arr[i][0]=1; arr[i][i]=1; for(int j=1;j<i;j++){ if(i>1){ arr[i][j]=arr[i-1][j-1]+arr[i-1][j]; } } } for(int i=0;i<arr.length;i++){ for(int j=0;j<i;j++){ System.out.print(arr[i][j]+"\t"); } System.out.println(); }*/ } }
package test.面試題; public class Test8 { /** 不使用迴圈達到陣列求和 [java] view plain copy print? package hello; public class TestA { public static int sum( int[] numbers ) { int total = 0; for ( int n : numbers ) total += n; return total; } public static int sum2( int... numbers ) { return sum2Helper(0, 0, numbers); } private static int sum2Helper( int total, int i, int... numbers) { return i == numbers.length ? total : sum2Helper(total + numbers[i], i + 1, numbers); } public static int sum3( int... numbers ) { return sum3Helper(0, numbers); } private static int sum3Helper( int i, int... numbers) { return i == numbers.length ? 0 : numbers[i] + sum3Helper(i + 1, numbers); } public static void main( String args[] ) { System.out.println(sum(1, 2, 3, 4)); System.out.println(sum2(1, 2, 3, 4)); System.out.println(sum3(1, 2, 3, 4)); } } //執行結果 //10 //10 //10 程式碼說明 sum函式使用普通的for each迴圈對陣列求和。 sum([1, 2, 3, 4]) = 0 + 1 + 2 + 3 + 4 sum2函式不使用迴圈而是用遞迴(左捲起)方式對陣列求和。 sum2([1, 2, 3, 4]) = (((0 + 1) + 2) + 3) + 4 sum3函式不使用迴圈而是用遞迴(右捲起)方式對陣列求和。 sum3([1, 2, 3, 4]) = 1 + (2 + (3 + (4 + 0))) */ public static void main(String[] args){ int[] a={1,2,3,4}; System.out.println(sum(1,a)); } public static int sum(int i,int[] arr){ return arr.length<=i?0:arr[i]+sum(i+1,arr); } }