写一个程序,把一个100以内的自然数分解因数(使用递归函数)

如题,代码如下:
#include<stdio.h>
static int a[20] = {0},k = 0;
int prime (int i) //判断是否是质素
{
int j = 0;
if(i > 2)
{
for(j = 2;j <= i;j++)
if(i%j == 0)
if( j != i)
break;
else
return 0;
}
else
return 0;
return 1;
}
int fun(int i)//递归调用函数
{
int j = 2;

if(prime(i))
{
for(j = 2;j < i;j++)
{
/*if(i == j)
{
a[k] = i;
return 0;

}*/

if(i%j == 0)
{
printf("%d ",i);
a[k] = j;
k++;
i = i/j;
printf("%d\n",i);
fun(i);

}
}
}
else
{
a[k] = i;
return 0;
}

}
int main()
{
int i = 100;
/*
while(i)
{
fun(i);
printf("%d = ",i);
while(k--)
printf("%d * ",a[k]);
printf("%d\n",a[k]);
i--;
k = 0;
}
*/
fun(i);//先只拿100来做实验,发现递归调用有问题,不知道问题再哪里
for(;k>=0;k--)
printf("%d\t",a[k]);
}

第1个回答  2014-10-16
呵呵,学习了,本人只会用b语言写这个,记得当时的关键是外部命令要封闭,不能泄露或进入死循环,还有就是知道是100以内的数字,就可以采用穷尽法进行,在首先判断非质数的情况下分两步:一是指令循环数字固定,依次为2、3、5、7、11、13、17、18、23、29、31、37、41、43;二是余数0的判定,反正就是循环用上面的固定质数去除,采用两个循环命令即可,最后的打印格式就简单了。
第2个回答  2014-10-16
//因为代码逻辑上有些问题,需大改动,程序如下,应该读得懂吧....
#include<stdio.h>
static int a[20] = {0},k = 0;
int prime (int i) //判断是否是质素
{
int j = 0;
if(i > 2)
{
for(j = 2;j <i;j++)
if(i%j == 0)
break;
}
if(j>=i || i==2)
return 1;
else
return 0;
}
int fun(int i,int j)//递归调用函数
{
if(prime(i))
{
return i;
}
else
{
if(i % j ==0)
{
printf("%d\t",j);
return fun(i/j,j);
}
else
{
return fun(i,j+1);
}
}

}
int main()
{
int i = 100;
printf("%d\t",fun(i,2)); 
}

追问

今天找出bug在哪里了,我都难得看你的程序,还是比较好懂你的,你把我的全部给改了,用你自己的思路了。我的需要在fun函数下面调用fun函数下面加个break语句,否则fun调用返回会继续执行for语句,而此时的i值还会进去fun函数,就是说调用fun函数,应该只调用一次就OK了,我的程序调用了两次甚至更多

本回答被提问者和网友采纳
相似回答