Skip to content

Latest commit

 

History

History
199 lines (144 loc) · 3.01 KB

[题解]八、递归函数.md

File metadata and controls

199 lines (144 loc) · 3.01 KB

八、递归函数

程序片段编程题

实验09-1:用递归求阶乘的和

【问题描述】输入一个整数n(0<n<=10),求1!+2!+3!+……+n!。定义并调用函数fact(n),计算n!,函数类型是double。 【输入形式】一个整数 【输出形式】一个浮点数,但不保留小数部分。 【样例输入】

3

【样例输出】

9
#include<stdio.h>
double fact(int x){

}

int main(){
	int i,n;
	double sum=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		sum=sum+fact(i);
	printf("%.0lf",sum);	
}
double fact(int x){
    double result;
    if(x==1||x==0)
        result=1;
    else
        result=x*fact(x-1);
    return result;
}

实验09-3:十进制转二进制

【问题描述】输入一个正整数n,输出其转换为二进制后的形式。要求定义并调用函数dectobin(n),其功能是输出n的二进制(在函数中输出)。 【输入形式】一个正整数 【输出形式】该正整数的二进制形式 【样例输入】

100

【样例输出】

1100100
#include<stdio.h>
void dectobin(int n){

}
int main(){
	int x;
	scanf("%d",&x);
	dectobin(x);
}
void dectobin(int n){
    if(n>1)
        dectobin(n/2);
    printf("%d",n%2);
}

实验09-4:递归实现整数的顺序、逆序输出

【问题描述】输入一个正整数,编写两个递归函数,分别实现对其按位顺序、逆序输出。 【输入形式】一个正整数 【输出形式】先顺序输出该整数的每一位值,中间用空格分开;再逆序输出该整数的每一位值,中间用空格分开 【样例输入】

1024

【样例输出】

1 0 2 4
4 2 0 1
#include<stdio.h>
void posi(int n){ 

}
void nega(int n){

}
int main(){
	int x;
	scanf("%d",&x);
	posi(x);
	printf("\n");
	nega(x);
}
void posi(int n){
    if(n>9)
        posi(n/10);
    printf("%d ",n%10);

}
void nega(int n){
    if(n>0){
        printf("%d ",n%10);
    nega(n/10);
    }

}

编程题

实验09-2:递归计算函数值Ack(m,n)的值

【问题描述】递归计算函数Ack(m,n)的值,输入两个整数m和n(m和n均大于0 ),输出函数Ack的值。Ack(m,n)的定义为: 当m=0时,Ack(m,n)=n+1; 当n=0且m>0时,Ack(m,n)=Ack(m-1,1); 当n>0且m>0时,Ack(m,n)=Ack(m-1,Ack(m,n-1)); 【输入形式】两个整数m和n 【输出形式】函数的名称,具体参数和计算结果。 【样例输入】

2 3

【样例输出】

Ack(2,3)=9
int Ack(int m,int n){
    if(m==0){
        return ((n)+1);
    }
    if(n==0&&m>0){
        return Ack(m-1,1);
    }
    if(n>0&&m>0){
        return Ack(m-1,Ack(m,n-1));
    }
    return 0;
}
#include<stdio.h>
int main()
{
    int m,n;
    scanf("%d%d",&m,&n);
    printf("Ack(%d,%d)=%d",m,n,Ack(m,n));
}