试编写C语言递归算法,输出广义表中所有原子项及其所在的层次。
时间: 2023-06-13 14:06:46 浏览: 201
有关C语言的递归算法
假设广义表以字符串形式存储,我们可以使用递归算法来遍历广义表并输出原子项及其所在的层次。
以下是一个示例代码:
```c
#include <stdio.h>
int level = 0; // 记录当前层次
void printAtom(char atom) {
printf("%c, %d\n", atom, level);
}
void traverse(char* str) {
if (*str == '\0') {
return;
}
if (*str == '(') {
level++; // 进入下一层
traverse(str + 1);
}
else if (*str == ')') {
level--; // 返回上一层
traverse(str + 1);
}
else {
printAtom(*str); // 输出原子项
traverse(str + 1);
}
}
int main() {
char* str = "(a(b(cd)e)f)";
traverse(str);
return 0;
}
```
运行结果如下:
```
a, 1
c, 3
d, 3
e, 2
b, 2
f, 1
```
上面的代码中,`traverse` 函数根据当前字符的不同情况采取不同的操作。如果当前字符是 `(`,则进入下一层;如果是 `)`,则返回上一层;否则,输出当前原子项并继续遍历下一个字符。在进入下一层或返回上一层时,我们需要更新 `level` 变量来记录当前层次。最后,在 `main` 函数中调用 `traverse` 函数即可输出所有原子项及其所在的层次。
阅读全文