递归函数例题(题目来源来自PTA)

1.阶乘n

#include 
long fac(int n)
{
	long f;
	if(n==0) f=1;
	else f=n*fac(n-1);
	return (f);
}
main()
{
	int n;
	long y;
	printf("\ninput a ieteger number:\n" );
	scanf("%d",&n) ;
	if (n<0)
	printf("data error\n");
	else
	{
		y=fac(n);
		printf("%d!=%ld",n,y);
	}
}

2.求组合数 (25分)
本题要求编写程序,根据公式C
​n
​m
​​ =
​m!(n−m)!

​n!
​​ 算出从n个不同元素中取出m个元素(m≤n)的组合数。

建议定义和调用函数fact(n)计算n!,其中n的类型是int,函数类型是double。

输入格式:
输入在一行中给出两个正整数m和n(m≤n),以空格分隔。

输出格式:
按照格式“result = 组合数计算结果”输出。题目保证结果在double类型范围内。

输入样例:
2 7
输出样例:
result = 21

#include 
int sushu(int n )
{int flag=1;
for(int i=2;i<n;i++)
{
   if(n%i==0)
   {
   	flag=0;
   	break;
   }	
}
return flag;
}
main()
{
	int n,k,sum=0,c=0;
	scanf("%d%d",&n,&k);
	for(int i=n;i>1;i--)
	{
		if(sushu(i))
		{
		c++;
		sum+=i;
		printf("%d",i);		
        if(c==k||i==2)
        {
        printf("=%d",sum);
        break;
    }
        else
        printf("+");
        
}
}

3.递归求Fabonacci数列 (15分)
本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:

f(n)=f(n−2)+f(n−1) (n≥2),其中f(0)=0,f(1)=1。

函数接口定义:
int f( int n );
函数f应返回第n个Fabonacci数。题目保证输入输出在长整型范围内。建议用递归实现。

裁判测试程序样例:
#include

int f( int n );

int main()
{
int n;

scanf("%d", &n);
printf("%d\n", f(n));

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:
6
输出样例:
8

#include 
int fei(int n)
{
	int f;
	if(n==1)
	{
	f=1;
}
	else if(n==2)
	{
		f=1;
	}
	else
	{
		f=fei(n-1)+fei(n-2);
	}
	return f;
}
int main()
{
	int n;
	scanf("%d",&n);
	printf("%d",fei(n));
	return 0;
}

4.递归计算Ackermenn函数 (20分)
本题要求实现Ackermenn函数的计算,其函数定义如下:

函数接口定义:
int Ack( int m, int n );
其中m和n是用户传入的非负整数。函数Ack返回Ackermenn函数的相应值。题目保证输入输出都在长整型

范围内。

裁判测试程序样例:
#include

int Ack( int m, int n );

int main()
{
int m, n;

scanf("%d %d", &m, &n);
printf("%d\n", Ack(m, n));

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:
2 3
输出样例:
9

#include 

int Ack( int m, int n );

int main()
{
    int m, n;

    scanf("%d %d", &m, &n);
    printf("%d\n", Ack(m, n));

    return 0;
}

/* 你的代码将被嵌在这里 */
int Ack( int m, int n )
{
	int f;
	if(m==0)
	f=n+1;
	if(n==0&&m>0)
	f=Ack(m-1, 1);
	else if(m>0&&n>0)
	f=Ack(m-1, Ack(m, n-1));
	return f;
 } 

5.递归实现指数函数 (20分)
本题要求实现一个计算x
​n
​​ (n≥1)的函数。

函数接口定义:
double calc_pow( double x, int n );
函数calc_pow应返回x的n次幂的值。建议用递归实现。题目保证结果在双精度范围内。

裁判测试程序样例:
#include

double calc_pow( double x, int n );

int main()
{
double x;
int n;

scanf("%lf %d", &x, &n);
printf("%.0f\n", calc_pow(x, n));

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:
2 3
输出样例:
8

#include 

int Ack( int m, int n );

int main()
{
    int m, n;

    scanf("%d %d", &m, &n);
    printf("%d\n", Ack(m, n));

    return 0;
}

/* 你的代码将被嵌在这里 */
int Ack( int m, int n )
{
	int f;
	if(m==0)
	f=n+1;
	if(n==0&&m>0)
	f=Ack(m-1, 1);
	else if(m>0&&n>0)
	f=Ack(m-1, Ack(m, n-1));
	return f;
 } 

你可能感兴趣的:(代码片)