将正整数n表示成一系列正整数之和 n=n1+n2````+nk;(其中n1>=1;````nk>=1) 正整n的这种表示为正整数n的划分称正整数n的划分.正整数n的不同的划分称为正整数n的划分数,记q(n,m)
求解: 请问以下程序,有什么问题 #include <iostream> using namespace std; //待划分参数正整数n,划分后最大正加数要求为m,返回划分的方法种类 int q(int n,int m) {
if (n <1 ¦ ¦m <1) return 0; //不可再分的条件
if((n==1) ¦ ¦(m==1)) return 1;
if(n <m) return q(n,n);
if(n==m) return q(n,m-1)+1; return q(n,m-1)+q(n-m,m); }
int main() { int n,m; char c; while(1) {//输入相关参数 cout < <"请输入你要划分的整数n="; cin>>n; cout < <"请输入你要划分的后最大的加数m="; cin>>m; //输出求解结果 cout < <"划分的方法种类" < <q(n,m) < <endl;
//判断是否继续计算 cout < <"是否结束求解(y/n)? "; cin>>c; if(c=='y') break;
}
return 0; } 为什么会出现以下这种错误的结论的
一生何求(443978206) 12:36:55 正确的应是q(6,6)=1(种划分方法"6") 正确的应是q(6,5)=1(种划分方法"5+1")
(编辑:ywang)
|