什么是递归?

百度百科上的解释是:程序调用自身的编程技巧称为递归(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)相关推荐

  1. Java 数据结构和算法 - 递归

    Java 数据结构和算法 - 递归 什么是递归 背景:数学归纳法证明 基本递归 printing numbers in any base 它为什么有效 如何工作 递归太多是危险的 树 数值应用 模幂运 ...

  2. Java数据结构和算法 - 递归

    三角数字 Q: 什么是三角数字? A: 据说一群在毕达哥拉斯领导下工作的古希腊的数学家,发现了在数学序列1,3,6,10,15,21,--中有一种奇特的联系.这个数列中的第N项是由第N-1项加N得到的 ...

  3. 数据结构与算法——递归、回溯与分治

    文章目录 1.预备知识 1.1 递归 1.2 回溯 1.3 位运算 2.子集 2.1 题目描述 2.2 解题思路--回溯递归法 2.3 C++实现 2.4 解题思路--位运算法 2.5 位运算实现 3 ...

  4. 数据结构与算法--递归(Recursion Algorithm)

    什么是递归算法? 把规模大的.较难解决的问题变成规模较小的.易解决的同一问题.规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解(基本问题),从而得到原来问题的解. 哪时候用递归算 ...

  5. 数据结构与算法——递归、回溯与分治汇总整理

    目录 预备知识:递归函数与回溯算法 例1-a:求子集(medium)(回溯法.位运算法) 例1-b:求子集2(medium)(回溯法) 例1-c:组合数之和2(medium)(回溯法.剪枝) 例2:生 ...

  6. Java学习手册:(数据结构与算法-递归)一个人爬楼梯,可以一次爬一阶或者两阶,问n层楼梯有多少种爬法?

    算法思想: (1)只有一层楼梯,有1种方法,即 f(1) = 1; (2)有两层楼梯,有2种方法,即 f(2) = 2: (3)有三层楼梯,a.如果第一步爬一层,后面还有两层楼梯未爬,有2种方法,即f ...

  7. python 进制转换_Python数据结构与算法——递归应用之进制转换

    高考加油 在前面的文章中堆栈也用于进制转换(存放余数).而递归也可以用于进制转换,有固定模式循环,并且可以规模越来越小的问题都可以转换成递归 栈与递归之间一定有点联系 整数转换成任意进制 日常运算都是 ...

  8. 数据结构与算法 - 递归回溯(迷宫问题)

    递归的概念 简单说就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码简介 递归的调用机制 递归能解决什么问题 递归需要遵守的重要规则 下面用代码来实现一个迷 ...

  9. Python 数据结构与算法——递归

    所谓递归,其实就是指某一函数--直接或间接--调用自己的操作. 下面将演示一个如何用递归的方式求解某一序列的求和: def S(seq, i=0):if (i == len(seq)): return ...

最新文章

  1. ACL2022引入滚动审稿机制,Deadline不足一个月啦
  2. “chaos”的算法---之哈希表(HASH)算法详解
  3. python libusb多线程_一些有助于理解libusb1.0和ctypes的异步USB操作
  4. python的__init__几种方法总结【转载】
  5. 文巾解题 LCP 11. 期望个数统计
  6. 【编程3】二叉树遍历(LeetCode.102)
  7. app中html静态页面缓存,移动端index.html被缓存问题
  8. android 内部共享存储,Android共享内部存储
  9. Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系
  10. java开源图像处理ku_83 项开源视觉 SLAM 方案够你用了吗?
  11. 线性调频信号(Chirp信号)公式
  12. aforge java_基于Aforge摄像头调用简单实例
  13. HTML中动态的增加和删除表格中的一行
  14. cad,max,revit,Civil ,InventorNavisworks 卸载清理工具
  15. FFmpeg学习之 一 (音视频理论知识)
  16. SqlServer 2008还原数据库步骤
  17. Apache DolphinScheduler征稿 — 小Demo轻松入门DolphinSchedule大数据调度工具
  18. java读取cmyk_用于检测CMYK图像的JAI ImageIO的纯Java替代品
  19. 对于目标识别的一些idea-传递特征的position而不是特征或特征图
  20. DHTML乌托邦:使用JavaScript和DOM的现代Web设计

热门文章

  1. 使用AMCap调整相机参数
  2. 自动化测试框架结构图
  3. 群发邮件很多都进了垃圾箱,怎么办?
  4. mongoDB图形可视化界面及操作
  5. LINUX嵌入式系统开发平台选择
  6. Win10微信 PC 端打字卡顿解决方法
  7. 【龙讯module小课堂】“光”怪陆离:PWmat计算光学性质(二)
  8. leetcode692:前K个高频单词
  9. JavaSwing_4.1: JFrame(窗口)
  10. bug记录--------JSON parse error:Cannot deserialize value of type `com.test.EnumTest` from String