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

作者:用户 来源:互联网 浏览:684 次 时间:2016-05-16 18:13:09

c语言

c语言-用C语言递归实现因数分解,不得使用循环 - 摘要: 用C语言递归实现因数分解,不得使用循环用C语言递归实现因数分解,比如54=3*3*3*2,不得使用循环#include<stdio.h>intisPrime(intn,intacc){if

问题描述

用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);
}
【云栖快讯】阿里云栖开发者沙龙(Java技术专场)火热来袭!快来报名参与吧!  详情请点击
云栖社区(yq.aliyun.com)为您免费提供c语言-用C语言递归实现因数分解,不得使用循环相关信息,包括 c语言 的信息 ,所有c语言-用C语言递归实现因数分解,不得使用循环相关内容均不代表云栖社区的意见! 该页面h5页面的地址是:https://m.aliyun.com/yunqi/wenzhang/show_23276,您可以点击c语言-用C语言递归实现因数分解,不得使用循环-手机站访问。
双十二
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备

热点导航