一直在疑惑为什么dep没有规定初值,而且也没有dep++,那递归GLDepth不也没用吗?请各位神仙指点一二

广义表的深度可以通过递归实现。假设广义表的数据结构如下:
typedef struct GLNode{
int tag;
union{
char data;
struct GLNode *sublist;
}val;
struct GLNode *next;
}GLNode, *GList;
其中,tag为0表示该元素是原子,tag为1表示该元素是子表。
求广义表的深度GLDepth可以通过如下代码实现:
int GLDepth(GList g){
if(g == NULL){ //空表深度为0
return 0;
}
if(g->tag == 0){ //原子深度为1
return 1;
}
int max_depth = 0;
/* 遍历子表,求出最大深度 */
GLNode *p = g->val.sublist;
while(p != NULL){
int depth = GLDepth(p);
if(depth > max_depth){
max_depth = depth;
}
p = p->next;
}
return max_depth + 1; //子表深度为最大深度加1
}
在递归过程中,dep并没有规定初值,是因为每次递归调用GLDepth时,都会重新定义一个dep变量,所以没有必要初始化。同时,也没有dep++,是因为每次递归调用GLDepth时,都会返回一个新的dep值,所以也不需要自增操作。