回 帖 发 新 帖 刷新版面

主题:新手求助

递归与非递归函数
编写一个函数,求从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个回复)

沙发

#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;
}

板凳

//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);
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册