今天学到了一个递归小例子:求n的全排列
#include<bits/stdc++.h> using namespace std; //求n的全排列 n!组数据 /* 每个全排列都有n个数,所以将求这n个数的全排列进行分解 : 1-求n-1的全排列 2-求n-2的全排列 3-求n-3的全排列 . . . n-求1的全排列 */ int n; int data[100]; //void swap(int& x,int& y){//交换两个数的值 // int temp = x; // x = y; // y = temp; //} void swap(int *x,int *y){//形参为两个指针 int temp = *x; x = y; *y = temp; } void solve(int t){ int i; if(t == n) { for(i=1;i<=n;i++) cout<<data[i]<<" "; cout<<endl; return; } //前t个数的已确定 接下来确定后面的数 for(i = t; i <= n; i++){ //每次交换两个数的值 swap(data[i],data[t]); //进入递归------->每次进入solve()即开始确认第t+1位上的数 //当t == n 那么就进行输出这一组排列数据 solve(t + 1); //还原数组为原来状态 swap(data[i],data[t]); } } int main(){ //初始化 数组 memset(data,0,sizeof(data)); cout<<"input n:"; cin>>n; //数组放入值 for(int i = 1; i <= n; i++) data[i]=i; solve(1); }
后面继续努力,祝我,也祝各位在算法的道路上坚持下来。
原文地址:https://www.cnblogs.com/Tisou1/p/12173565.html
时间: 2024-10-08 08:16:17