1. 程式人生 > >遞歸(3)

遞歸(3)

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) 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)。 } }

遞歸(3)