題目描述:設 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,輸入都是剛學的,不知道輸入還有沒有更簡單的輸入方法,還請各位指點指點啦!