问题描述
- 用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 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);
}
else
{
foo(n, acc - 1);
}
}
int main()
{
int n = 54;
printf("%d=", n);
foo(n, n);
}
54=3*3*3*2
解决方案三:
#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("%dn",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("%dn",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("%dn",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);
}
时间: 2024-09-19 23:59:09