c语言递归小讲

来源:互联网 发布:公安部网络安全保卫局 编辑:程序博客网 时间:2024/06/05 18:34

代码1:函数调用函数的递归,死循环递归,这种递归会提示堆栈溢出的问题


下面是执行图解:


代码2:下面这个递归也很简单,就是循环递归,可以控制次数,比如下面我们要打印10gogogo


下面是执行图解:


代码3:下面我们用递归做一个1+......100


下面是加到5的图解分析



代码4:这道题就会有点难度了,腾讯面试题,假定有一个很长的台阶,一次只能走一步或2步,你有多少种走法走到台阶上去(假设台阶有50步)

假设1个台阶-->1种方法1

假设2个台阶-->2种方法11  2

假设3个台阶-->3种方法111  12 21

假设4个台阶-->5种方法1111  121  112 211  22

.......

由此我们总结出了一个规律:f(n)=f(n-1)+f(n-2);

就比如说我们想走到第五十步台阶,要么从48开始走,要么从49开始走。那么走到48有几种方法,走到49又有几种方法......


由此,我们从上面可以得到递归的精髓:每一步都依赖于上一步,数据特别大时,利用公式来求解

代码5:把一个十进制整数变成二进制数据

除基取余法,倒序排列

 

下面是数字10变二进制码的图解过程:

 


代码6:计算阶乘


代码7:用递归打印如下图形


主要是找到规律,根据金子塔相应的高度打印不同的金子塔。返回的是炮弹的数量


代码8:使用c编写一个指数函数,实现n^k


代码9:写一个递归函数,求最大公约数,gcd(m,n),计算m,n的最大公约数。


代码10:写一个递归函数digit_sum(n);输入一个非负整数,返回组成它的数字之和


代码11:计算一个数字的根,数字根的定义是,它是一个非负整数,它的所有数字和,反复相加,直到只剩下一个数字为止。例如:1729

1729->1+7+2+9=19

19->1+9=10

10->1+0=1

那么1就是这个数字的根




代码12:计算组合数:C(n,r)=n!/r!(n-r)!

好了,递归就算说道这么多吧,递归我下次还会更深入的说。
0 0
原创粉丝点击