通过引用循环函数传递变量

时间:2017-02-11 07:10:50

标签: c++ recursion pass-by-reference static-variables

是一个函数的参数,它是递归函数中对变量处理static的引用?以下是在BST中查找第k个最小根的函数。

int findNode(TreeNode* root, int &k) {
    if(root == NULL)
        return -1;
    // We do an inorder traversal here.
    int k1 = findNode(root->left, k);
    if(k == 0) return k1; // left subtree has k or more elements.
    k--;
    if(k == 0) return root->val; // root is the kth element.
    return findNode(root->right, k); // answer lies in the right node.
}

int kthsmallest(TreeNode* root, int k) {
    return findNode(root, k);  // Call another function to pass k by reference.
}

函数kthsmallest返回第k个最小节点的值。

节点定义:

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;
}

我的问题是为什么k通过引用传递。

1 个答案:

答案 0 :(得分:2)

k的含义与整体算法相关,而不是对findNode的单独调用。它就像一个倒数计时器;当k达到0时,算法终止。所有递归调用都有相同的倒计时。

传递对调用范围中的变量的引用解决了与static类似的问题,但它通常被认为是软件工程中的一种优秀技术。全局(例如static)限制了程序的可伸缩性。

故事的寓意不是使用像k这样的名字。称之为remaining_nodes