已知递归字符函数具有下面特殊的递归性质,请编写程序求解
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
注意:题目提供前置代码,只需要提交需要补全的函数即可。
预设代码
前置代码
- /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */
- #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;
- }
- /* PRESET CODE END - NEVER TOUCH CODE ABOVE */
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
代码实现:
#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';
}
}