通过递归分解二的幂次方

null  •  3年前


include

using namespace std;

//first n为操作数,r为递归深度,并记录当前的幂次方 //分解137为2(7)+2(3)+2(0)

void fun1(int n, int r) {

//递归结束出口
if(n == 1 )cout<<"2("<<r<<")";
else{
	//继续分解,深度及幂次方加一。先分解再输出,且只有该位分解有余数才输出
	fun1(n/2,r+1);
	if(n%2 == 1)cout<<"+2("<<r<<")";
}

}

//second n为操作数,r为递归深度,并记录当前的幂次方 //进一步细化在分解137为2(7)+2(3)+2(0)的基础上进一步分解r

void fun2(int n, int r) {

//递归结束出口,需要继续分解2(7),也就是继续分解r
if(n == 1 ){
	switch(r){
			case 0:cout<<"2(0)";break;
			case 1:cout<<"2";break;
			case 2:cout<<"2(2)";break;
			default:
				cout<<"2(";
				fun2(r,0);//注意括号输出。继续分解r即可
				cout<<")";
	}
}
else{
	//继续分解,深度及幂次方加一。先分解再输出,且只有该位分解有余数才输出
	fun2(n/2,r+1);
	if(n%2 == 1){
		switch(r){
						case 0:cout<<"+2(0)";break;
						case 1:cout<<"+2";break;
						case 2:cout<<"+2(2)";break;
						default:
							cout<<"+2(";
							fun2(r,0);//注意括号输出。继续分解r即可
							cout<<")";
				}
	}
}

}

int main(void) {

cin >> n;
//fun1(n,0);
//cout<<endl;
fun2(n,0);
return 0;

}


评论:

请先登录,才能进行评论