如题,代码如下:
#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]);
}
今天找出bug在哪里了,我都难得看你的程序,还是比较好懂你的,你把我的全部给改了,用你自己的思路了。我的需要在fun函数下面调用fun函数下面加个break语句,否则fun调用返回会继续执行for语句,而此时的i值还会进去fun函数,就是说调用fun函数,应该只调用一次就OK了,我的程序调用了两次甚至更多
本回答被提问者和网友采纳