用C语言递归实现因数分解,不得使用循环

用C语言递归实现因数分解,比如54=3*3*3*2,不得使用循环

 #include <stdio.h>
int isPrime(int n, int acc)
{
    if (n == 2) return 1;
    if (acc == 1) return 1;
    if (n % acc == 0) return 0;
    return isPrime(n, acc - 1);
}
void foo(int n, int acc)
{
    if (n % acc == 0 && isPrime(acc, acc - 1) && n == acc) { printf("%d", acc); return; }
    if (n % acc == 0 && isPrime(acc, acc - 1))
    {
        printf("%d*", acc);
        foo(n / acc, acc);
    }
    foo(n, acc - 1);
}
int main()
{
    int n = 54;
    foo(n, n);
}

#include "stdio.h"

int mult(int data ,int i)
{
if(data <= 1)
return 0;

    if(data%i == 0)
    {
        printf("%d",i);
        data /= i;
        if(data > 1)
        {
            printf("*");
        }
    }
    else i ++;

    return mult(data,i);

}

int main(void)
{
int num;
scanf("%d",&num);
printf("%d = ",num);
mult(num,2);
return 0;
}

 #include <stdio.h>  
void fun(int n,int m=2)
{
    if(n<2) return;
    if(n==m)
    {
        printf("%d\n",m);
        return;
    }

    if(n%m==0)
    {
        printf("%d*",m);
        fun(n/m);
        return;
    }
    fun(n,m+1);
}

void main()
{
    int n;
    while(1)
    {
        scanf("%d",&n);
        fun(n);
    }
}

改为纯c实现:

 #include <stdio.h>  
void fun(int n,int m)
{
    if(n<2) return;
    if(n==m)
    {
        printf("%d\n",m);
        return;
    }

    if(n%m==0)
    {
        printf("%d*",m);
        fun(n/m);
        return;
    }
    fun(n,m+1);
}

void main()
{
        int n=54;
        printf("%d=",n);
        fun(n,2);
}

去掉默认参数,调试完毕:

 #include <stdio.h>  
void fun(int n,int m)
{
    if(n<2) return;
    if(n==m)
    {
        printf("%d\n",m);
        return;
    }

    if(n%m==0)
    {
        printf("%d*",m);
        fun(n/m,2);
        return;
    }
    fun(n,m+1);
}

void main()
{
    int n=54;
    printf("%d=",n);
    fun(n,2);
}