void fun(struct node* start)
{
if(start == NULL)
return; // LINE 1
printf("%d ", start->data);
if(start->next != NULL )
fun(start->next->next);
printf("%d ", start->data);
}
返回声明如何工作?我没有得到它的工作!
问题是:
以下函数的输出是什么,用于指向以下链表的第一个节点? 1→2→3→4-将5-→6
答案 0 :(得分:2)
return
语句立即终止该函数;如果start
为NULL
,则该函数不执行任何操作。如果函数总是到达其正文的末尾,则可以按如下方式重写该函数,有些人认为该函数更清晰。
void fun(struct node* start)
{
if(start != NULL)
{
printf("%d ", start->data);
if(start->next != NULL)
fun(start->next->next);
printf("%d ", start->data);
}
}
关于输出,请注意start->data
的内容是两次打印,即在函数体的开头和结尾。
更准确地说,请考虑以下输入。
1->2->3->4->5->6
第一个调用在结尾处打印1
,并在结尾打印结果
跟随之间的递归调用;换行符是为了更好的易读性。
1
[output for the list 3->4->5->6]
1
使用相同的参数在中间扩展调用会产生以下输出。
1
3
[output for the list 5->6]
3
1
同样,可以扩展递归调用。
1
3
5
[output for an empty list]
5
3
1
由于空列表的输出也为空,因此整体输出如下:
1
3
5
5
3
1
答案 1 :(得分:-1)
更具体地说,您正在看到递归函数的基本情况。递归函数通常有两个分支:
1)基本情况(或一组基本情况),函数只返回(通常带有值,有时不返回)。 2)递归情况,如果基本情况包括对函数本身的一个或多个递归调用则执行。
在上面的函数中,基本案例是(start == NULL)
。递归案例调用fun(start->next->next);
。