遞歸(3)
阿新 • • 發佈:2018-03-20
nbsp quest || col log blog ring [] 整數
1.對處理遞歸方法的總結
調用遞歸的時候,把遞歸函數當成一個黑盒子,下面的這位總結的不錯可以參考
https://www.zhihu.com/question/31412436/answer/51922344
2.整數劃分問題
package day6; import java.util.Scanner; public class Division { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("請輸入一個正整數:");int m = sc.nextInt(); System.out.println("請輸入你的最大加數"); int n = sc.nextInt(); int num = q(m, n, ""); System.out.println("num=" + num); } private static int q(int m, int n, String str) { // 必須要求:m>0,n>0 if (m < 0 || n < 0) return0; //輸出都是1+1+1+1+...+1的情況 if ((m == 1) || (n == 1)) { System.out.print(str); for (int i = 1; i < m; i++) { System.out.print("1+"); } System.out.println("1"); return 1; } //最大不超過n即q(m,m)等效於 最大為m + q(m,m-1)繼續遞歸if(m==n){ System.out.println(str+m); return 1+q(m,m-1,str); } //最大不超過m即q(m,n)等效於 q(m,n-1) + q(m-n,n) if(m>n){ int n1 = q(m-n,n,str+n+"+"); int n2 = q(m,n-1,str); return n1+n2; } return q(m,m,str);//m < n,直接返回遞歸分解的個數q(m,m)。 } }
遞歸(3)