(中科院软件所 1997 )m可表示为一些不超过n的自然数之和
设m,n均为自然数,m可表示为一些不超过n的自然数之和,
f(m,n)为这种表示方式的数目。
例:f(5,3)=5,有五种表示方式:
3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1
分析:
- 当m=1时,f(m,n)=1
- 当n=1时,f(m,n)=1
- 当m<n时,return f(m,m)
- 当m=n时,return 1+f(m,m-1)
- 当m>n时,return f(m,n-1)+f(m-n,n)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int f(int m, int n)
{
if(m==1)
return 1;
else if(n==1)
return 1;
else if(m<n)
return f(m,m);
else if (m==n)
return 1+f(m,n-1);
else if(m>n)
return f(m,n-1)+f(m-n,n);
else
return 0;
}
int main()
{
int m,n;
cout<<"input the integer: m:"<<endl;
cin>>m;
cout<<"input the integer: n:"<<endl;
cin>>n;
cout<<"the result is: "<<f(m,n)<<endl;
system("pause");
return 0;
}
题目不难,但是要想做对还是要实际动手写一写,很多易错之处。