/* 将一个整数写成几个质因数的连乘积,如: 输入36,则程序输出36=2*2*3*3 。 1.程序分析, 比如12=2*2*3 找到12最小的质因数,2,然后递归 12/2=6 将6 放进去,6=2*3 同理 2是最小的质因数,剩下的 */ #include"stdio.h" #include<iostream> using namespace std; void resverse(int n) { if(n==2||n==3) //判出条件暂时设置为2或者3 { printf("最后一个数是%d",n); } int i,k; for(i=2;i<n;i++) { !!!!!!!!!!!!!! 递归的两个重点 第一个是回归条件 第二个是递归完之后呢 if(n%i==0) { // printf("%d %d",n,i) k=n/i; printf("%d",i); resverse(k); break; } } } int main() { int n; //scanf("%d",n); //备注 在这里用scanf就不可以,调试之后就会死循环 ???? 明天过来解决,感冒快死了 //用cin 就可以 不报错 cin >> n; resverse(n); system("pause"); }
关于递归部分比较重要的两个点 一个是回归条件 第二个是递归完毕之后的事情
我这里有两个问题, 因为还在测试阶段, 这里的回归条件明天过来改
哎呀 SBSB了 地制符没有加
scanf("%d",&n); 这样就对了
/* 将一个整数写成几个质因数的连乘积,如: 输入36,则程序输出36=2*2*3*3 。 1.程序分析, 比如12=2*2*3 找到12最小的质因数,2,然后递归 12/2=6 将6 放进去,6=2*3 同理 2是最小的质因数,剩下的 */ #include"stdio.h" #include<iostream> using namespace std; void resverse(int n) { /* if(n==2||n==3) //判出条件暂时设置为2或者3 { printf("最后一个数是%d",n); } */ int i,k; int count=0; for(i=2;i<=n;i++) { if(n%i==0) { count++; } } if(count==1) { printf("最后一个数是%d",n); //判出条件改为是不是质数 } for(i=2;i<n;i++) { !!!!!!!!!!!!!! 递归的两个重点 第一个是回归条件 第二个是递归完之后呢 if(n%i==0) { // printf("%d %d",n,i) k=n/i; printf("%d",i); resverse(k); break; } } } int main() { int n; scanf("%d",&n); //备注 在这里用scanf就不可以,调试之后就会死循环 //用cin 就可以 不报错 //cin >> n; //scanf("%s%d",s,&n)!=EOF resverse(n); system("pause"); }