c++ - 如何以非递归形式重写此函数?

标签 c++ recursion

<分区>

如何以非递归形式重写此函数?

void generate(int pos)
{
  if (pos == n + 1)
  {
    print_table();
  }
  else 
  {
    for (int i = 1; i <= n; i++)
    {
      if (!used[i])
      {
        used[i] = true;
        perm[pos] = i;
        generate(pos + 1);////recursion
        used[i] = false;
      }
    }
  }
}

最佳答案

此代码似乎为数字 1,...,n 的每个排列调用 print_table()。在 C++ 中有一个内置工具。

#include <algorithm>

void generate() {
    int n = 10; // or whatever

    std::vector<int> perm(n);
    for(int i=0; i<n; i++) perm[i] = i+1;
    do {
        print_table(perm);
    } while(std::next_permutation(perm, perm+n));
}

关于c++ - 如何以非递归形式重写此函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20958753/

相关文章:

javascript - Node.js 上的事件相关递归

php - 递归无限循环?

c++ - 怎么知道哪段内存全为零

python - 递归检查奇数或偶数

recursion - F# 递归行为

java - 生成一个 'special matrix'

c++ - Win32应用程序调用C代码

c++ - 将 QPushButton 添加到 QTableWidget 中的 QTableWidgetItem 中,如何使其成为 Qt::AlignHCenter

C++ Qt 返回空 QString

c++ - 在 C++ 中自然禁止包装类