C++ 手动跟踪递归函数

C++ 手动跟踪递归函数,c++,recursion,C++,Recursion,我在跟踪递归函数方面有些困难。例如,以以下字符串置换函数为例: void string_permutation(string str, int mid, int end) { if (mid == end) cout << str << endl; else { for (int i = mid; i <= end; i++) { swap(str[mid], st

我在跟踪递归函数方面有些困难。例如,以以下字符串置换函数为例:

void string_permutation(string str, int mid, int end)
{
    if (mid == end) 
        cout << str << endl;
    else 
    {
        for (int i = mid; i <= end; i++) 
        {
            swap(str[mid], str[i]);
            string_permutation(str, mid + 1, end);
            swap(str[mid], str[i]);
        }
    }
}

<>我如何快速(通过手动跟踪,即没有调试器,认为你在面试中)找出,比如说,这个函数的第十个输出?更一般地说,如何跟踪递归函数?

将迭代计数添加到方法调用中,然后在第10次调用时进行调试(或根据需要进行调试):


将迭代计数添加到方法调用中,然后在第10次调用时进行调试(或根据需要进行调试):


将迭代计数添加到方法调用中,然后在第10次调用时进行调试(或根据需要进行调试):


将迭代计数添加到方法调用中,然后在第10次调用时进行调试(或根据需要进行调试):


只需在
cout上插入断点,只需在
cout上插入断点,只需在
cout上插入断点,实际上没有固定的规则来调试适合所有模式的递归函数,尽管有一些方法可以跟踪它


除此之外,您还可以使用
print
语句来查找每个递归的值。

实际上,没有固定的规则来调试适合所有模式的递归函数,尽管有一些方法可以跟踪它


除此之外,您还可以使用
print
语句来查找每个递归的值。

实际上,没有固定的规则来调试适合所有模式的递归函数,尽管有一些方法可以跟踪它


除此之外,您还可以使用
print
语句来查找每个递归的值。

实际上,没有固定的规则来调试适合所有模式的递归函数,尽管有一些方法可以跟踪它




除此之外,你可以使用
print
语句来找出每次递归的值。

通过调试程序运行它。我想说,用笔和纸做这件事的好方法效果最好:)@DrYap我想看看关于如何用笔和纸做这件事的一些建议。这是一个非常主观的答案(这是一个主观的问题)然后。通过调试我会说用纸和笔做这件事最好:)@DrYap我想看看关于如何用纸和笔做这件事的一些建议。这是一个非常主观的答案(这是一个主观的问题)然后,通过调试程序运行它。我认为用纸和笔进行调试的好方法效果最好:)@DrYap我想看看关于如何用纸和笔进行调试的一些建议。这是一个非常主观的答案(这是一个主观的问题)然后,通过一个调试器运行它。我会说用笔和纸做这件事的好方法是最好的:)@DrYap我想看看关于如何用笔和纸做这件事的一些建议。那将是一个非常主观的答案(这是一个主观的问题)。这是如何使用调试器来帮助你。我想看看关于如何用笔和纸做这件事的建议。考虑到你正在接受面试。然后答案是“使用你的大脑”和笔和纸。关于如何做这件事有什么建议吗?这是如何使用调试器帮助你。我想看看关于如何用笔和纸做这件事的建议。考虑到你正在接受面试。然后答案是“使用你的大脑”和笔和纸。关于如何做这件事有什么建议吗?这是如何使用调试器帮助你。我想看看关于如何用笔和纸做这件事的建议。考虑到你正在接受面试。然后答案是“使用你的大脑”和笔和纸。关于如何做这件事有什么建议吗?这是如何使用调试器帮助你。我想看看关于如何用笔和纸做这件事的建议。考虑到你正在接受面试。然后答案是“用你的大脑”和笔和纸一起。关于如何做到这一点的任何建议?再次,这是如何使用调试器帮助你。我想看看关于如何用笔和纸做这件事的建议。你在接受采访吗?你的问题是跟踪这个函数没有电脑,只有人的想法吗?@herohuyongtao如果是这样,请再看一次,这是如何使用调试器来帮助你的。我想看看关于如何用笔和纸做这件事的建议。你在接受采访吗?你的问题是跟踪这个函数没有电脑,只有人的想法吗?@herohuyongtao如果是这样,请再看一次,这是如何使用调试器来帮助你的。我想看看关于如何用笔和纸做这件事的建议。你在接受采访吗?你的问题是跟踪这个函数没有电脑,只有人的想法吗?@herohuyongtao如果是这样,请再看一次,这是如何使用调试器来帮助你的。我想看看关于如何用笔和纸做这件事的建议。你在接受采访吗?你的问题是在没有电脑的情况下追踪这个功能,仅仅是人类的想法吗?@herohuyongtao如果是,请参见编辑
string str = "abcd";
string_permutation(str, 0, str.size()-1);
void string_permutation(string str, int mid, int end, int iterationCount)
{
    // Bump up our iterationCount
    iterationCount += 1;

    // Debug on 10th call
    if (iterationCount == 10)
        Debug.WriteLine("10th call: " + str + ", " + mid + ", " + end);

    if (mid == end) 
        cout << str << endl;
    else 
    {
        for (int i = mid; i <= end; i++) 
        {
            swap(str[mid], str[i]);
            string_permutation(str, mid + 1, end, iterationCount);
            swap(str[mid], str[i]);
        }
    }
}
string str = "abcd";
string_permutation(str, 0, str.size()-1, 0);
("abcd", 0, 3)
("abcd", 0, 3)
("bacd", 1, 3)
("abcd", 0, 3)
("bacd", 1, 3)
("bcad", 2, 3)
("bcda", 3, 3)
("abcd", 0, 3)
("bacd", 1, 3)
("bcad", 2, 3)
return
("abcd", 0, 3)
("bacd", 1, 3)
return