求表示方法數-遞歸法

求表示方法數
題目描述:設 n、m 均爲自然數,n 可表示爲一些不超過 m 的自然數之和,f(n,m) 爲這種表示方式的數目。
例如,f(5,3)=5,有5種表示方法:3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1。
請編寫程序,計算f(n,m)的值。
輸入:n m

輸出:f(n,m)的值

算法分析:因爲智商有限,只能看了貼之後才寫出來的,遞歸目的是把處理的數字規模逐漸縮小,最終遞歸到n==1||m==1的情況,最後一句return countNumber( n , m-1 ) + countNumber( n-m , m ),需要寫出若干表達式就可推出來了,程序還是比較簡潔的,不過遞歸方程還是不好想出來(智商有限,見諒啦大笑)。


import java.util.Scanner;    //引入Scanner這個類

public class CountNumber{    //public類,文件的接口
    
    public int countNumber( int n , int m ){    //遞歸計算數量
        if( n==1 || m==1 )    return 1;
        else if( n==m )        return 1 + countNumber( n , m-1 );
        else if( n<m )        return countNumber( n , n );
        else return countNumber( n , m-1 ) + countNumber( n-m , m );
    }
    
    public static void main( String [] args ){
        int n , m ;
        Scanner in = new Scanner( System.in );    //輸入對象in
        CountNumber var = new CountNumber( );
        n = in.nextInt( );        //輸入整數
        m = in.nextInt( );
        System.out.println( var.countNumber( n , m ) );
    }
}

初學Java,輸入都是剛學的,不知道輸入還有沒有更簡單的輸入方法,還請各位指點指點啦!偷笑
發佈了26 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章