递归(3)
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) return 0; //输出都是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)。 } }