2.递归字符函数

已知递归字符函数具有下面特殊的递归性质,请编写程序求解

                                                             RecursionFunction(int n-1, '*'),   if n>0 and c = '#'

                                                             RecursionFunction(int n+2, '?'),   if n>0 and c = '*'

RecursionFunction(int n, char c)=   RecursionFunction(int n+3, '+'),   if n>0 and c = '?'

                                                             RecursionFunction(int n-6, '#'),   if n>0 and c = '+'

                                                             ‘\n’, else situations

在n>0时,输出n个字符;递归函数退出时,输出:"RecursionFunction has been over !"

输入描述:

一行,整型数字n,与字符c,作为递归函数的参数。

输出描述:

两行字符串:

第一行为对应的输出内容,第二行为结束字符。

样例输入:

3 ?

样例输出:

???++++++

RecursionFunction has been over !

【解释】: 输入为"3 ?"时,表示递归函数为(3, ?),因此需要输出3个'?', 接下来会求解(6,+),因此需要输出6个'+',接下来(0,#) 递归结束,输出要求语句。

数据范围

 字符C∈{'?','#','*','+'}, 1≤n≤40

注意:题目提供前置代码,只需要提交需要补全的函数即可。

预设代码

前置代码

view plainprint?

  1. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */  
  2. #include <stdio.h>  
  3. void PrintChar(int number,char c){  
  4.     int i;  
  5.     for ( i=0 ; i< number; i++)  
  6.         printf("%c",c);  
  7. }  
  8.   
  9. // 递归函数-----------需要补全  
  10. char RecursionFunction(int n, char c);  
  11.   
  12. int main(){  
  13.     char c; int n;  
  14.     scanf("%d %c",&n,&c);  
  15.     RecursionFunction(n,c);  
  16.     return 0;  
  17. }  
  18.   
  19. /* PRESET CODE END - NEVER TOUCH CODE ABOVE */  
测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 6 +↵
以文本方式显示
  1. ++++++↵
  2. RecursionFunction has been over !↵
1秒64M0

代码实现:

#include <stdio.h>  
void PrintChar(int number,char c){  
    int i;  
    for ( i=0 ; i< number; i++)  
        printf("%c",c);  
}  
   
char RecursionFunction(int n, char c);  
  
int main(){  
    char c; int n;  
    scanf("%d %c",&n,&c);  
    RecursionFunction(n,c);  
    return 0;  
}  
char RecursionFunction(int n,char c)
{PrintChar(n,c);
	if(n>0)
	{
		if(c=='#')
		{
			return RecursionFunction(n-1,'*');
		}
		else if(c=='*')
		{
			return RecursionFunction(n+2,'?');
		}
		else if(c=='?')
		{
			return RecursionFunction(n+3,'+');
		}
		else if(c=='+')
		{
			return RecursionFunction(n-6,'#');
		}
	}
	
	else
	{
	printf("\nRecursionFunction has been over !\n");
		return '0';
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值