天天看点

递归算法:全排列、2的幂次方表示

全排列:
           
/*
 * 1.cpp
 *
 *  Created on: 2017年8月31日
 *      Author: Administrator
 */

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

void perm(string s, int k){
	int n = s.length();
	if (k == n-1) {
		cout<< s <<endl;
	} else {
		for (int i = k; i < n; ++i) {
			swap(s[i],s[k]);
			perm(s,k+1);
		}
	}
}

int main(){
	string s;
	cin>>s;
	perm(s,0);
	return 0 ;
}


           
2的幂次方表示:
           
/*
 * 1.cpp
 *
 *  Created on: 2017年8月31日
 *      Author: Administrator
 */

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

void print(int n){
	if(n == 0) return ;
	if(n == 1){
		cout<<"2(0)";
		return ;
	}
	if(n == 2){
		cout<<"2";
		return ;
	}

	int j = 1, i = 0;
	do {
		j <<= 1;

		if(j>n){
			j >>= 1;
			if(i == 1){
				cout << "2";
			}
			else{
				cout<<"2(";
				print(i);
				cout<<")";
			}

			if(n - j){
				cout<<"+";
				print(n-j);
			}
			break;
		}
		else{
			i ++;
		}
	} while (1);
}

int main(){
	int num;
	cin>>num;
	print(num);
	return 0;
}

           

继续阅读