【发布时间】:2019-05-28 17:18:48
【问题描述】:
我在 geeksforgeeks.org 上的 C++ 中找到了这个递归函数,用于合并和排序两个单链表,我使用 netbeans 调试了这段代码,但我仍然无法清楚地了解这段代码背后的功能。我也看到过类似的代码stackoverflow,但没有解释它的工作方式。我的问题是关于它背后的想法以及它的工作方式,这里的充分解释也将帮助其他人解决同样的问题。
在netbeans上调试代码,了解代码的工作流程
//Merges two given lists in-place. This function
// mainly compares head nodes and calls mergeUtil()
Node *merge(Node *h1, Node *h2)
{
if (!h1)
return h2;
if (!h2)
return h1;
// start with the linked list
// whose head data is the least
if (h1->data < h2->data)
{
h1->next = merge(h1->next, h2);
return h1;
}
else
{
h2->next = merge(h1, h2->next);
return h2;
}
}
这个函数应该返回一个排序的链表
【问题讨论】:
-
对“归纳证明”做一些谷歌搜索。这是一个数学概念,但它完美地应用在这里。一旦你阅读并理解了归纳证明的工作原理,你应该能够完美地理解这个递归函数:假设这个函数返回一个排序列表。那是你的出发点。此函数返回一个排序列表。你接受这个事实,理所当然。现在,使用您刚刚学习的归纳证明的基本原理,逐行完成这个简单的函数。
-
链接 Mathematical induction 或 Structural induction 会很有帮助
标签: c++ function sorting recursion singly-linked-list