#include <stdio.h>void prim(int n, int i){if(n >= i){while(n % i){i++;}n /= i;prim(n, i);printf("%d\n", i);}
}int main(){int num, i = 2;scanf("%d", &num);prim(num, i);return 0;
}

运行结果:


while(n % i)

代表取余。当余数是0的时候表示除尽,结束while循环,即找到一个质因数,此时一个质因数即为 i 。如果没有除尽则会继续执行 i++,i 的最大值为 i 的值等于 n的值,当 i 等于 n 的时候这个循环一定会结束,成为结束这个循环的最终条件。不会让程序陷入死循环。

n /= i;

让 n 除去这个质因数,然后再进入求新 n 质因数的递归。

例如:
当求 15 的分解质因数
当 n = 15, i = 2时;

prim函数第一次执行:

判断 15 >= 2
执行结果 true

while 循环体第一次执行:

while(15 % 2) 是否执行 i++
执行结果 true true

注:在C语言中 1为true , 0为false. 当 n % i 的结果为0时,循环体才会结束。

while 循环体第二次执行:

while(15 % 3) 是否执行 i++
执行结果 false false

此时结束 while 循环。

开始执行 n /= i; 语句,这条语句由以下过程实现
15 / 3 = 5; n = 5;
用 n 的值 ÷ 质因数(循环体结束后得到的 i 结果)再把商赋值给 n。

再次调用 prim(n, i)函数。


prim函数第二次执行:

判断 5 >= 3
执行结果 true

while 循环体第一次执行:

while(5 % 3) 是否执行 i++
执行结果 true true

while 循环体第二次执行:

while(5 % 4) 是否执行 i++
执行结果 true true

while 循环体第二次执行:

while(5 % 5) 是否执行 i++
执行结果 false false

此时结束 while 循环。

开始执行 n /= i; 语句,这条语句由以下过程实现
5 / 5 = 1; n = 1;
用 n 的值 ÷ 质因数(循环体结束后得到的 i 结果)再把商赋值给 n。
再次调用 prim(n, i)函数。


prim函数第三次执行:

判断 1 >= 5
执行结果 false

第三次函数结束执行开始逐层结束第一次和第二次运行的函数
其次结束第二次运行的prim函数打印 5
最后结束第一次运行的prim函数打印 3

所以最后得出 3 和 5 是 15 的分解质因数。

注:变量 i 在整个递归的过程中初始值为2,在每次prim(n, i)函数调用的时候不会被初始化,递归过程中共用的都是同一个变量 i 的值。只有当main函数程序结束的时候,变量 i 的值才会在内存中销毁,当程序再次重新运行时,变量 i 的值才会初始化为2。

C语言 递归实现分解质因数相关推荐

  1. c语言分解质因数的设计思路,C语言开发中分解质因数的操作实例

    C语言的开发在日常开发中被广泛使用,而我们都知道C语言是简单的编译方法,爱站技术频道小编今天就为大家带来了C语言开发中分解质因数的操作实例,一起去进入下文看看吧! 首先来看一个最简单的C语言实现质因数 ...

  2. c语言100以内分解质因数,用C语言实现,将100以内的自然数分解质因数

    仅供参考,尽管是C# //****************************************************************************** // Autho ...

  3. Java 小例子:分解质因数

    这个例子演示如何利用递归来完成分解质因数. import java.util.List; import java.util.ArrayList; /** * 分解质因数 */ public class ...

  4. c语言用质因数分解法求最大公约数,分解质因数法求最大公约数(javascrip实现)

    //判断是否为质数------------------------------------------------------ function isPrime(n) { for (var i = n ...

  5. 蓝桥杯 基础练习 分解质因数 python语言

    蓝桥杯 基础练习 分解质因数 python语言 描述 求出区间[a,b]中所有整数的质因数分解. 输入 输入描述: 输入两个整数a,b. 输入样例: 3 10 输出 输出描述: 每行输出一个数的分解, ...

  6. 蓝桥杯 基础练习 分解质因数 C语言

    蓝桥杯 基础练习 分解质因数 C语言 描述 求出区间[a,b]中所有整数的质因数分解. 输入 输入描述: 输入两个整数a,b. 输入样例: 3 10 输出 输出描述: 每行输出一个数的分解,形如k=a ...

  7. 素数c分解语言程序,深入分析C语言分解质因数的实现方法

    首先来看一个最简单的C语言实现质因数分解的列子: #include void main( ) { int data, i = 2; scanf("%d", &data); ...

  8. 分解质因数c语言设计思路,深入分析C语言分解质因数的实现方法

    首先来看一个最简单的C语言实现质因数分解的列子: #include void main( ) { int data, i = 2; scanf("%d", &data); ...

  9. C语言,分解质因数一个解法!_只愿与一人十指紧扣_新浪博客

    题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. 现在,你的程序要读入一个 ...

最新文章

  1. Django框架视图类
  2. Matlab代码的耗时分析、优化、加速
  3. 业务代码解构利器--SWAK 1
  4. FX-3U PLC串口与PC通信调试
  5. java 29期淘淘商城_JavaEE大型分布式电商项目 淘淘商城 29期
  6. origin画图初步入门
  7. 插入网线后以太网显示ip4连接无网络访问权限
  8. 传输层 TCP 三次握手中性能优化 SYN_RCV 状态/syn攻击
  9. html显示当前脚本错误,访问网页总是提示当前网页脚本发生错误怎么办?
  10. dz60自定义配列并用qmk编译固件
  11. 关于多对多关系(即E-R图中m:n)中的界面展示优化
  12. 计算机画图学生作品小学,电脑绘画作品_需要一件小学生电脑绘画作品
  13. 什么叫矫顽力(bHc),什么叫内禀矫顽力(jHc)?
  14. 解决ios13 cydia更新出现http/1.1 404 not found
  15. 推荐几款好用的办公软件
  16. 支持 Linux 操作系统的高速 IrDA 红外控制器
  17. 第一个SOFARPC工程
  18. 按头安利 好看又实用的毕业季插画素材看这里
  19. Mac第三方恶意软件删除不了怎么办,这个方法你尝试了吗?
  20. 七夕福利:程序员如何通过H5绘制手掌地图表白

热门文章

  1. jmeter --上传文件
  2. EJB的分类及其各自的功能和应用
  3. linux问答学知识
  4. 由浅入深:自己动手开发模板引擎——解释型模板引擎
  5. 机房收费系统重构之存储过程的使用
  6. 算法:最接近的三数之和
  7. golang中strings.ToUpper
  8. 网站的高性能架构--web前端优化
  9. 计算机组成原理:储存系统和结构
  10. 十进制数转为十六进制字符串