编写下列3个递归程序,不用抄写题目、只写序号即可。注意格式和缩进对齐。既可以只写子程序即递归,也可以完整写出主、子程序。输入输出自行定义。 第1题:输入二正整数m、n,求这二个数的最大公约数,要求使用递归f(m,n),其返回的是这二个整数的最大公约数。
时间: 2024-02-03 10:13:47 浏览: 19
```python
def f(m, n):
if n == 0:
return m
else:
return f(n, m % n)
```
注:此处使用了辗转相除法求最大公约数。
相关问题
帮我写一个200字递归子程序法实现语法分析器实验小结
在语法分析器实验中,递归子程序法是一种常用的方法。该方法通过递归调用子程序来实现对文法的解析,从而实现对输入的语句进行语法分析。具体实现过程如下:
首先,需要定义一个文法,并将其转化为递归子程序的形式。递归子程序的形式应该与文法的产生式规则一一对应,每个产生式规则对应一个子程序。
其次,需要编写递归子程序的代码实现。在递归子程序中,需要对输入的语句进行逐个识别,并根据文法的规则进行分析。如果匹配成功,则调用相应的子程序进行进一步的解析。如果匹配失败,则返回错误信息。
最后,需要进行测试和调试。可以编写一些测试用例来验证语法分析器的正确性,同时根据测试结果进行调试和优化。
总之,递归子程序法是一种简单有效的语法分析方法,可以用于实现各种编译器和解释器。
使用递归编写一个C语言的算术表达式求值,只含一个参数的程序
以下是一个递归求解算术表达式的 C 语言程序,只含一个参数:
```c
#include <stdio.h>
#include <stdlib.h>
int evaluate(char *expression);
int main(int argc, char **argv) {
if (argc < 2) {
printf("Usage: %s <expression>\n", argv[0]);
return 1;
}
int result = evaluate(argv[1]);
printf("%d\n", result);
return 0;
}
int evaluate(char *expression) {
// 基本情况
if (*expression == '\0') {
return 0;
} else if (*expression == '+') {
return evaluate(expression + 1) + evaluate(expression + 2);
} else if (*expression == '-') {
return evaluate(expression + 1) - evaluate(expression + 2);
} else if (*expression == '*') {
return evaluate(expression + 1) * evaluate(expression + 2);
} else if (*expression == '/') {
return evaluate(expression + 1) / evaluate(expression + 2);
} else {
return atoi(expression);
}
}
```
该程序将命令行参数中的表达式传递给 `evaluate` 函数,该函数通过递归地处理表达式来计算其结果。基本情况是当表达式字符串为空时返回 0,或者当遇到数字时返回该数字的整数值。对于运算符,函数将递归地调用自身以计算其左右操作数,并在操作数上执行相应的运算。