C语言|深度解析C语言之递归求解算法

哈哈哈!!!
本文主要包括两个部分:
1.递归算法介绍。
2.基本题目求解。
递归,我个人认为也是个极其折磨人的算法,难以理解。
曾几何时,有人说过一句令人望而却步的话,人创造迭代(个人理解为循环),神,创造递归。
由此可见,递归的恐怖!!!
吓死宝宝了!!!让我哭会儿哈!!!
算法介绍 先来个标准版的:
程序调用自身的编程技巧称为递归( recursion)。
递归做为一种算法在程序设计语言中广泛应用。
一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,
它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,
递归策略 只需少量的程序就可描述出解题过程所需要的多次重复计算,
大大地减少了程序的代码量。
【C语言|深度解析C语言之递归求解算法】递归的主要思考方式在于:把大事化小
递归的必要条件
1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。
2.每次递归调用之后越来越接近这个限制条件。
简单易懂版的:
所谓递归就是在大学上课时上老师说大家都要坐在前8排,现在你正在最后一排坐着(开玩笑哈!!!这么爱学习的孩子咋能在最后一排里!!!哼!!欺负我!!不和你玩了!),你也不想数一数你在第几排,这时你就问前一排的v美美v哈,前排的v美美v和你一样又问前排,一直这样问到了第一排,这时有回信了,说第一排,又一个一个传了回来每个人把传到的数加1就是当前的位置了,就这样就传了回来,你也知道了自己的位置。。。说到底,你要往前移座位吗???
嘿嘿嘿!!!
题目求解 题目1:斐波那契数列求解(和小青蛙跳台阶类似,自行解答哦)
递归算法:

int fib1(int n) { if (n == 1 || n == 2) return 1; else return faib1(n - 1) + faib1(n - 2); }

非递归算法:
long long faib2(int n) { long long a = 1; long long b = 1; long long c = 1; while (n > 2) { c = a + b; //实现重新赋值一定要弄明白哈 a = b; b = c; n--; } return c; } //由于作者写代码时相求更大的斐波那契数而定义long long

题目二:实现一个数各位上的数的和(递归算法)
int DigitSum(int n) { if (n > 9) {return n%10+DigitSum(n/10); //关键点 } else { return n; }

题目三:阶乘计算
非递归算法
int factorial(int x) { int ret = 1; for (int i = 1; i <= x; i++) { ret *= i; } return ret; }

递归算法
int factorial(int x) { if (x == 1) { return 1; } else return x * factorial(x - 1); }

注:编者水平有限,若有错误,欢迎指正。

    推荐阅读