hutods
hutods
采纳率100%
2015-12-12 13:36 阅读 1.7k
已采纳

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2015-12-12 13:55
     #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);
    }
    
    点赞 评论 复制链接分享
  • u014070258 DeamonYang 2015-12-12 14:14

    #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;
    }

    点赞 1 评论 复制链接分享
  • qq_27183003 ysuwood 2015-12-12 15:11
     #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);
        }
    }
    
    
    点赞 评论 复制链接分享
  • qq_27183003 ysuwood 2015-12-13 00:29

    改为纯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);
    }
    
    点赞 评论 复制链接分享
  • qq_27183003 ysuwood 2015-12-13 00:33

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

     #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);
    }
    
    点赞 评论 复制链接分享

相关推荐