確實花錢訂閱了一下數據結構與算法的專欄,這里沒有把專欄里面的內容寫到博客上,我很注重人家的勞動成果的,所以我只把我寫的,或者是網上找的一些算法的實例在這里貼出來,方便自己以后的學習,以及對自己的對一些比較常見的算法的理解有所幫助!
在公司的時候,空閑的時間寫的遞歸算法的一些實例,我也測試過了,可以運行的!
1 /*** 2 * 遞歸求和 1+2+3+...+n 3 * @param n 輸入的數值 4 * @return 5 */ 6 public static int recursionSum(int n){ 7 8 if(n>0){ 9 return n + recursionSum(n); 10 }else{ 11 return 0; 12 } 13 } 14 15 /*** 16 * 遞歸階乘 n! = n*(n-1)*(n-2)*...*1 17 * @param n 需要求取階乘的數值 18 * @return 19 */ 20 public static int recursionMulity(int n){ 21 22 if(n == 1){ 23 return 1; 24 } 25 return n * recursionMulity(n-1); 26 } 27 28 /*** 29 * 題意:一個人趕着鴨子去每個村庄賣,每經過一個村子賣去所趕鴨子的一半又一只。 30 * 這樣他經過了七個村子后還剩兩只鴨子,問他出發時共趕多少只鴨子?經過每個村子賣出多少只鴨子? 31 * 32 * 分析:第七天后該人只有2只鴨子,記每天的鴨子數量為num,則之前每天的鴨子總數為當天后一天的(num+1)*2只,當天賣掉的鴨子個數為(num/2)+1只 33 * 34 * 算法步驟: 35 * 1) 令num等於2,n等於7; 36 * 2) 計算前一天的總鴨子數量num = (num + 1) * 2; 37 * 3) 計算並輸出第n天賣掉的鴨子數量; 38 * 4) 將n減去1,判斷n是否大於0,若是,則輸出總鴨子數量num,否則,遞歸調用函數繼續進行計算。 39 * 40 * @param num 最后一天剩余的鴨子的數量 41 * @param counter 村庄的個數 42 * @return 計算出的sum的和 43 */ 44 public static int duck_sale(int num, int counter){ 45 46 num = (num + 1) * 2; 47 System.out.println("第"+counter+"個村子賣出的鴨子的數量是:>>>>>>"+(num/2-1)); 48 //計數器減1 49 counter--; 50 51 if(counter > 0){ 52 //說明前面鴨子沒賣完 遞歸調用方法 算出該村子賣出的鴨子的數量 53 duck_sale(num,counter); 54 }else{ 55 //說明鴨子賣完了 56 System.out.println("鴨子的總數是:>>>>>>"+num); 57 } 58 return num; 59 } 60 /*** 61 * 角谷定理。輸入一個自然數,若為偶數,則把它除以2,若為奇數,則把它乘以3加1。經過如此有限次運算后,總可以得到自然數值1。 62 * 求經過多少次可得到自然數1。 63 * 如:輸入22, 64 * 輸出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 65 * STEP=16 66 * 67 * 算法步驟: 68 * 1)定義計數器counter=0 輸入自然數的值 69 * 2)判斷n 是否為偶數,若是,則n=n/2 若不是,則n=n*3+1 70 * 3)判斷n是否等於1 若是,則輸出counter,若不是繼續 調用jiaogu() 71 * 72 * @param n 輸入的自然數 所要求的數值 73 * @return 輸出最后結果所需要的調用幾次 74 */ 75 public static int jiaogu(int n, int counter){ 76 77 //這個計數器不可以在這里賦值的,這樣每一次調用方法進來之后,都會重置counter的值 78 //int counter = 1; 79 80 if(n == 1){ 81 System.out.println("Step is >>>>>>"+counter); 82 }else{ 83 //計數器+1 84 counter++; 85 if(n % 2 == 0){ 86 n = n / 2; 87 }else{ 88 n = n * 3 + 1; 89 } 90 91 System.out.println("輸出當前自然數的值是:>>>>>>"+n); 92 //遞歸調用 93 jiaogu(n,counter); 94 } 95 return counter; 96 }