数据结构与算法--递归(factorial)
什么是递归?
百度百科上的解释是:程序调用自身的编程技巧称为递归(factorial)。
递归是一种应用比较广泛的算法,它通常把一个复杂的问题转化为一个与原问题相似小问题来求解,这样大大的减少了程序的代码量。
举个简单的例子,数学中会有计算阶乘的题目,例如3的阶乘是多少?我们很快能得到答案6。那假如数值更大呢?作为一个程序猿,我们可以使用代码来实现。下面以C语言为例,计算阶乘,代码如下:
#include <stdio.h>#define FUNCTION_TRUE 1
#define FUNCTION_FALSE 0void print_loop(void);
long factorial(int n);
long iterative_factorial(int n);int main(void)
{int a = 0;long result = 0;//print_loop();printf("请输入要计算阶乘的数值:");scanf("%d",&a);#if FUNCTION_TRUEresult = factorial(a);printf("%d的阶乘是%ld",a,result);
#elseresult = iterative_factorial(a);printf("%d的阶乘是%ld",a,result);
#endifreturn 0;
}void print_loop(void)
{printf("Hello!\n");print_loop();
}long factorial(int n)
{if(n == 0){return 1;}else{return n * factorial(n - 1);}
}long iterative_factorial(int n)
{int cnt = 0;long fac = 1;for(cnt = 1;cnt <= n;cnt++){fac *= cnt;}return fac;
}
上面代码用了两种方式来实现阶乘的计算,一个是使用迭代的方式,使用iterative_factorial函数来实现,另一种是使用递归的方式,使用的是factorial函数。两个函数的切换使用#if--#else--#endif的结构来切换,这个结构在往后的编程中也会经常使用,可以用来注释代码,也可以用来进行函数调用的切换。
数据结构与算法--递归(factorial)相关推荐
- Java 数据结构和算法 - 递归
Java 数据结构和算法 - 递归 什么是递归 背景:数学归纳法证明 基本递归 printing numbers in any base 它为什么有效 如何工作 递归太多是危险的 树 数值应用 模幂运 ...
- Java数据结构和算法 - 递归
三角数字 Q: 什么是三角数字? A: 据说一群在毕达哥拉斯领导下工作的古希腊的数学家,发现了在数学序列1,3,6,10,15,21,--中有一种奇特的联系.这个数列中的第N项是由第N-1项加N得到的 ...
- 数据结构与算法——递归、回溯与分治
文章目录 1.预备知识 1.1 递归 1.2 回溯 1.3 位运算 2.子集 2.1 题目描述 2.2 解题思路--回溯递归法 2.3 C++实现 2.4 解题思路--位运算法 2.5 位运算实现 3 ...
- 数据结构与算法--递归(Recursion Algorithm)
什么是递归算法? 把规模大的.较难解决的问题变成规模较小的.易解决的同一问题.规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解(基本问题),从而得到原来问题的解. 哪时候用递归算 ...
- 数据结构与算法——递归、回溯与分治汇总整理
目录 预备知识:递归函数与回溯算法 例1-a:求子集(medium)(回溯法.位运算法) 例1-b:求子集2(medium)(回溯法) 例1-c:组合数之和2(medium)(回溯法.剪枝) 例2:生 ...
- Java学习手册:(数据结构与算法-递归)一个人爬楼梯,可以一次爬一阶或者两阶,问n层楼梯有多少种爬法?
算法思想: (1)只有一层楼梯,有1种方法,即 f(1) = 1; (2)有两层楼梯,有2种方法,即 f(2) = 2: (3)有三层楼梯,a.如果第一步爬一层,后面还有两层楼梯未爬,有2种方法,即f ...
- python 进制转换_Python数据结构与算法——递归应用之进制转换
高考加油 在前面的文章中堆栈也用于进制转换(存放余数).而递归也可以用于进制转换,有固定模式循环,并且可以规模越来越小的问题都可以转换成递归 栈与递归之间一定有点联系 整数转换成任意进制 日常运算都是 ...
- 数据结构与算法 - 递归回溯(迷宫问题)
递归的概念 简单说就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码简介 递归的调用机制 递归能解决什么问题 递归需要遵守的重要规则 下面用代码来实现一个迷 ...
- Python 数据结构与算法——递归
所谓递归,其实就是指某一函数--直接或间接--调用自己的操作. 下面将演示一个如何用递归的方式求解某一序列的求和: def S(seq, i=0):if (i == len(seq)): return ...
最新文章
- ACL2022引入滚动审稿机制,Deadline不足一个月啦
- “chaos”的算法---之哈希表(HASH)算法详解
- python libusb多线程_一些有助于理解libusb1.0和ctypes的异步USB操作
- python的__init__几种方法总结【转载】
- 文巾解题 LCP 11. 期望个数统计
- 【编程3】二叉树遍历(LeetCode.102)
- app中html静态页面缓存,移动端index.html被缓存问题
- android 内部共享存储,Android共享内部存储
- Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系
- java开源图像处理ku_83 项开源视觉 SLAM 方案够你用了吗?
- 线性调频信号(Chirp信号)公式
- aforge java_基于Aforge摄像头调用简单实例
- HTML中动态的增加和删除表格中的一行
- cad,max,revit,Civil ,InventorNavisworks 卸载清理工具
- FFmpeg学习之 一 (音视频理论知识)
- SqlServer 2008还原数据库步骤
- Apache DolphinScheduler征稿 — 小Demo轻松入门DolphinSchedule大数据调度工具
- java读取cmyk_用于检测CMYK图像的JAI ImageIO的纯Java替代品
- 对于目标识别的一些idea-传递特征的position而不是特征或特征图
- DHTML乌托邦:使用JavaScript和DOM的现代Web设计
热门文章
- 使用AMCap调整相机参数
- 自动化测试框架结构图
- 群发邮件很多都进了垃圾箱,怎么办?
- mongoDB图形可视化界面及操作
- LINUX嵌入式系统开发平台选择
- Win10微信 PC 端打字卡顿解决方法
- 【龙讯module小课堂】“光”怪陆离:PWmat计算光学性质(二)
- leetcode692:前K个高频单词
- JavaSwing_4.1: JFrame(窗口)
- bug记录--------JSON parse error:Cannot deserialize value of type `com.test.EnumTest` from String