递归与递推

    科技2022-07-11  97

    题目链接:92. 递归实现指数型枚举

    #include <iostream> using namespace std; const int N = 20; int n, st[N]; void dfs(int k) { if(k == n) { for(int i = 0; i < n; i++) { if(st[i] == 1) cout<<i + 1<<" "; } cout<<endl; return; } //不选的情况 st[k] = 2; dfs(k + 1); st[k] = 0; //选择的情况 st[k] = 1; dfs(k + 1); st[k] = 0; } int main() { cin>>n; dfs(0); return 0; }

    题目链接:94. 递归实现排列型枚举

    #include <iostream> using namespace std; const int N = 10; int n, st[N], res[N]; void dfs(int k) { if(k == n) { for(int i = 0; i < n; i++) { cout<<res[i]<<" "; } cout<<endl; return; } for(int i = 0; i < n; i++) { if(!st[i]) { st[i] = 1; res[k] = i + 1; dfs(k + 1); st[i] = 0; } } } int main() { cin>>n; dfs(0); return 0; }

    题目链接:93. 递归实现组合型枚举

    #include <iostream> using namespace std; const int N = 30; int n, m, res[N]; void dfs(int u, int start) { if(u > m) { for(int i = 1; i <= m; i++) { cout<<res[i]<<" "; } cout<<endl; return; } for(int i = start; i <= n; i++) { res[u] = i; dfs(u + 1, i + 1); res[u] = 0; } } int main() { cin>>n>>m; dfs(1, 1); return 0; }

    题目链接:717. 简单斐波那契

    #include <iostream> using namespace std; const int N = 50; int f[N], n; int main() { cin>>n; f[1] = 0, f[2] = 1; for(int i = 3; i <= n; i++) { f[i] = f[i - 1] + f[i - 2]; } for(int i = 1; i <= n; i++) cout<<f[i]<<" "; return 0; }
    Processed: 0.026, SQL: 8