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

问题描述

用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

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

c语言-C语言递归函数C语言递归函数C语言递归函数

问题描述 C语言递归函数C语言递归函数C语言递归函数 #include<stdio.h> #include<stdlib.h> //用递归函数来计算N的阶乘 double factorial(int n) { double result; if(n<0) { printf("输入错误 "); } else if(n==1 ||n==0) { result=1; } else { result=factorial(n-1)*n; //n=5 5-1=4 4*

C#语言与Java语言程序的比较

迈入二十一世纪以来,信息行业飞速壮大,其中在软件开发中Java语言与C#语言都独当一面,得到了逐步完善和广泛的应用,Java语言和C#语言都是一种面向对象的语言,但Java程序和C#程序还是有一定的区别. 下面分别是两种语言的程序的例子. 1.Java语言的基本程序: Import java.util.*; Package HelloJava{ Public class Message{ Public static void main(String [] args){ System.out.pr

Thinkphp搭建包括JS多语言的多语言项目实现方法_php实例

本文实例讲述了Thinkphp搭建包括JS多语言的多语言项目实现方法.分享给大家供大家参考.具体实现方法如下: 一.问题: 项目需要开发英文版,于是需要搭建多语言项目. 项目使用Thinkphp框架,隐约记得Thinkphp有多语言设置,翻看了帮助手册,果然有,这就边实验边开始: 二.实现方法: Thinkphp采用app_begain来检测和切换语言包,语言包和项目相关,构架等都比较简单,具体的这里:http://www.thinkphp.cn/info/188.html 搭建好了,就可以使用

r语言-对一个向量的划分,求C语言或R语言实现

问题描述 对一个向量的划分,求C语言或R语言实现 1C 向量U={123456}利用R1属性划分为:U/R1={{123}{456}}利用R2属性划分为:U/R2={{12}{3456}}利用R3属性划分为:U/R3={{1234}{56}}最后得到划分的交集:U/R={{12}{3}{4}{56}}

c-C语言实现:如何对txt文档进行循环追加

问题描述 C语言实现:如何对txt文档进行循环追加 随机生成字符串,例如abc,依次对txt1进行替换"?",并存入txt2中,txt1文档内容为#?%实现后 txt2文档内容为#a% #b% #c% 解决方案 你先将 txt 文档读入内存,再按字符串进行处理,然后写入文件. 解决方案二: 就是简单的文件读取,然后字符串替换,然后写入新文件. 解决方案三: io流 读取txt1 用字符串接收 然后 就是字符串的字符替换 接着写入到txt2就行了 解决方案四: 文件读取 字符串替换咯 解

Swift语言指南(一)--语言基础之常量和变量

原文:Swift语言指南(一)--语言基础之常量和变量 Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swift 提供了 C 与 Objective-C 中的所有基础类型,包括表示整数的 Int,表示浮点数的 Double 与 Float,表示布尔值的 Bool,以及表示纯文本数据的 String. Swift 还为两个基本集合类型 Array 与 Dictionary 提供了强大的支持,详情可参考 (集合

Swift语言指南(三)--语言基础之整数和浮点数

原文:Swift语言指南(三)--语言基础之整数和浮点数   整数   整数指没有小数的整数,如42,-23.整数可以是有符号的(正数,零,负数),也可以是无符号的(正数,零). Swift提供了8,16,32,64位形式的有符号和无符号的整数,这些整数遵循与C语言相似的命名规则.如8位无符号整数的类型为UInt8,32位有符号整数的类型为Int32,和Swift语言的其它类型一样,这些整型命名以大写字母开头.   整数的边界 你可以通过min或max属性为每一个整数类型指定一个最小值或最大值:

各国语言缩写列表,各国语言缩写-各国语言简称,世界各国域名缩写

$amount = '12345.67'; $formatter = new \NumberFormatter('en_GB', \NumberFormatter::CURRENCY); echo 'UK: ' . $formatter->formatCurrency($amount, 'EUR') . '<br/>'; $formatter = new \NumberFormatter('de_DE', \NumberFormatter::CURRENCY); echo 'DE: '

c语言与c++语言之间的相互转化

问题描述 c语言与c++语言之间的相互转化 struct student*p0 scanf("%s",p0->num) scanf("%s",&p0->name) 解决方案 C++也能兼容C,直接编译看有没有什么语法错误 解决方案二: 对的,C++编译器本来就支持几乎所有C语法 你为何还需要改 C --> C++ #include scanf("%s",p0->num); --> std::cin >&