C++ 递归函数之分解质因子
【问题描述】 输入一个正整数 n,用递归方法从小到大输出它的所有质因子(因子是质数)。
【输入格式】 一行一个正整数 n,2≤n≤10000。
【输出格式】 一行若干个正整数,两数之间用一个空格隔开,从小到大输出。
【输入样例】 18 【输出样例】 2 3 3
【问题分析】 显然,如果 n 等于 1,就没法再分解了。如果 n 大于 1,从整数 p(p 从 2 开始)开始试除,如果能被 p 整除,就得到一个质因子 p。问题就转化成对于整数 n/p,从 p 开始继续分解质因子。 如果不能被 p 整除,问题就转化为对于整数 n,从 p+1 开始分解质因子。所以,递归公式为:
#include<iostream>
using namespace std;
bool first = true;
void zyz(int n,int p){
if(n > 1){
if(n % p == 0){
if(first){ // 是否是第一个因子
cout << p; // 输出第一个因子
first = false;
}
else cout << " " << p; // 输出不是第一个的因子
zyz(n/p,p);
}
else zyz(n,p+1);
}
}
int main(){
int n;
cin >> n;
zyz(n,2);
cout << endl;
return 0;
}