主题:新手求助
潮流末11
[专家分:0] 发布于 2011-10-12 20:20:00
递归与非递归函数
编写一个函数,求从n个不同的数中取r个数的所有选择的个数。其个数值为:
其中: n! = n*(n-1)*(n-2)*...*1。
[测试数据]:
输入:5 3
输出:10
输入:10 20
输出:Input Invalid !
输入:-1 4
输出:Input Invalid!
输入:50 3
输出:19600
输入:0 0
程序结束
[实现要求]:
(1) 分别用递归和非递归两种方式完成程序设计;
(2) 主程序中设计一个循环,不断从输入接收n和r的值,计算结果并输出,当用户输入0 0时,程序结束;
(3)能检查输入数据的合法性,要求n>=1并且n>=r;
(4)上面的测试数据能得到正确结果。
回复列表 (共2个回复)
沙发
winmain2008 [专家分:280] 发布于 2011-10-12 22:49:00
#include <iostream>
#include <stdlib.h>
using namespace std;
int Arrange(int N,int r)
{
int result = 1;
for(int i = r;i <= N; i++)
{
result *= i;
}
return result;
}
int Select(int N,int r)
{
if(r > N || r <= 0 || N < 0)
{
cerr<<"Input Invalid!"<<endl;
exit(0);
}
return Arrange(N,N - r + 1) / Arrange(r,1);
}
int RArrange(int N,int r)
{
if(N == r)
{
return r;
}
else
{
return N * RArrange(N - 1,r);
}
}
int RSelect(int N ,int r)
{
if(r > N || r <= 0 || N < 0)
{
cerr<<"Input Invalid!"<<endl;
exit(0);
}
return RArrange(N,N - r + 1) / RArrange(r,1);
}
int main()
{
cout<<RSelect(50,3)<<endl;
cout<<Select(-1,4)<<endl;
return 0;
}
板凳
laowang [专家分:90] 发布于 2011-10-13 22:38:00
//g++编译器 平台linux没有完成迭代部分
#include <iostream>
#include <cstdlib>
using namespace std;
int factorial(int n);
int multip(int pre,int back);
int main()
{
int preNum;
int backNum;
int result;
char choice = 'y';
while(1)
{
if((choice == 'n')||(choice == 'N'))
break;
else
{
cout<<"Input numbers:";
cin>>preNum>>backNum;
if((preNum < 1)||(preNum < backNum))
{
cout<<"Input invalid!"<<endl;
}
else
{
cout<<multip(preNum,backNum)<<endl;
cout<<factorial(backNum)<<endl;
result = multip(preNum,backNum) / factorial(backNum);
cout<<"Reslut is:"<<result<<endl;
}
cout<<"Continue or not(y/n)?:";
cin>>choice;
}
}
return 0;
}
int multip(int pre,int back)
{
int temp=pre;
if(back == 1)
return pre;
else
return temp*multip(--pre,--back);
}
int factorial(int n)
{
if( (1 == n))
return 1;
else
return n * factorial(n-1);
}
我来回复