1、炮弹一样的球状物体,能够堆积成一个金字塔,在顶端有一个炮弹,它坐落在一个4个炮弹组成的层面上,而这4个炮弹又坐落在一个9个炮弹组成的层面上,以此类推。写一个递归函数CannonBall,这个函数把金字塔的高度作为参数,并且返回它所包括的炮弹数量。函数必须按照递归方式实现,不可以使用迭代结构,例如while或for。

  1. int CannonBall(int h)
  2. {
  3. if(h == ) return ;
  4. else
  5. return CannonBall(h-) + pow(h,);
  6. }
  7.  
  8. int main(void)
  9. {
  10. printf("%d\n",CannonBall());
  11. return ;
  12. }

C代码

2、使用C编写一个指数函数,实现n^k

  1. int RaiseToPower(int n, int k)
  2. {
  3. if(k == )
  4. return ;
  5. else
  6. return n * RaiseToPower(n,k -);
  7. }
  8.  
  9. int main()
  10. {
  11. printf("%d\n",RaiseToPower(,));
  12. return ;
  13. }

C代码

3、使用欧几里得公式写一个递归函数gcd(m,n),用来计算m与n的最大公约数.

  1. int gcd(int m, int n)
  2. {
  3. if(m % n ==)
  4. return n;
  5. else
  6. return gcd(n,m % n);
  7. }
  8.  
  9. int main()
  10. {
  11. printf("%d\n",gcd(,));
  12. return ;
  13. }

C代码

4、写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19

  1. int DigitSum(int n)
  2. {
  3. if(n < )
  4. return n;
  5. else
  6. return ((n % ) + DigitSum(n / ));
  7. }
  8.  
  9. int main()
  10. {
  11. printf("%d\n",DigitSum());
  12. return ;
  13. }

C代码

5、整数n的数字根是如下定义的:它是一个整数的所有数字的和,反复相加,直到只剩下一位数字为止。例如:1729的digital root按照如下的步骤计算:

step 1:    1+7+2+9   ----->  19

step 2:    1+9           ----->  10

step 3:    1+0           ------>  1

因为第三步的结果是1,所以1就是数字根的值。

写一个函数DigitalRoot(n),返回参数的根,注意:写一个纯粹的、不使用任何循环结构的递归函数。

  1. int DigitSum(int n)
  2. {
  3. if(n < )
  4. return n;
  5. else
  6. return ((n % ) + DigitSum(n / ));
  7. }
  8.  
  9. int DigitalRoot(int n)
  10. {
  11. if(n < )
  12. return n;
  13. else
  14. return DigitalRoot(DigitSum(n));
  15. }
  16.  
  17. int main()
  18. {
  19. printf("%d\n",DigitalRoot());
  20. return ;
  21. }

C代码

6、计算组合数C(n,k)

  1. int Comb(int n, int k)
  2. {
  3. if(k == || n == k)
  4. return ;
  5. else
  6. return (Comb(n - ,k - ) + Comb(n - ,k));
  7. }
  8.  
  9. int main()
  10. {
  11. int i;
  12. for(i = ; i <= ; i++)
  13. {
  14. printf("%d ",Comb(,i));
  15. }
  16. printf("\n");
  17. return ;
  18. }

C代码

7、将一个整数作为字符串打印

  1. #include<stdio.h>
  2.  
  3. void printd(int n)
  4. {
  5. if(n < ) {
  6. putchar('-');
  7. n = -n;
  8. }
  9. if(n / )
  10. printd(n / );
  11. putchar(n % + '');
  12. }
  13.  
  14. int main()
  15. {
  16. int a = ;
  17. printd(a);
  18. printf("\n");
  19. return ;
  20.  
  21. }

C代码

8、运用上面printd函数的设计思想编写一个递归版本的itoa函数,即通过递归函数把整数变为字符串

  1. #include<stdio.h>
  2.  
  3. void itoa(int n, char *s)
  4. {
  5. static int i;
  6. if(n / )
  7. itoa(n / , s);
  8. else {
  9. i = ;
  10. if(n < )
  11. s[i++] = '-';
  12. }
  13. s[i++] = abs(n) % + '';
  14. s[i] = '\0';
  15. }
  16.  
  17. int main()
  18. {
  19. char s[];
  20. int n = ;
  21. itoa(n, s);
  22. printf("%s\n",s);
  23. return ;
  24.  
  25. }

C代码

9、编写一个递归版本的reverse(s)函数,以将字符串s转置

  1. #include<stdio.h>
  2.  
  3. void reverser(char *s, int i, int len)
  4. {
  5. int c, j;
  6. j = len - (i + );
  7. if(i < j) {
  8. c = s[i];
  9. s[i] = s[j];
  10. s[j] = c;
  11. reverser(s, ++i, len);
  12. }
  13. }
  14.  
  15. void reverse(char *s)
  16. {
  17. int len;
  18. len = strlen(s);
  19. reverser(s, , len);
  20. }
  21.  
  22. int main()
  23. {
  24. char s[];
  25. gets(s);
  26. reverse(s);
  27. printf("%s\n",s);
  28. return ;
  29. }

C代码

C语言递归练习的更多相关文章

  1. c语言递归讲解分析

    C语言允许函数调用它自己,这种调用的过程称为"递归(recursion)" 举例说明,如下代码: #include <stdio.h> void up_and_down ...

  2. C语言递归,非递归实现翻转链表

    翻转链表作为,链表的常用操作,也是面试常遇到的. 分析非递归分析: 非递归用的小技巧比较多,很容易出错. 递归分析比较简单,在代码里面 代码: #include<stdio.h> #inc ...

  3. 汉诺塔(河内塔)算法 ----C语言递归实现

    汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子, 在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺 ...

  4. C语言——递归练习

    1.炮弹一样的球状物体,能够堆积成一个金字塔,在顶端有一个炮弹,它坐落在一个4个炮弹组成的层面上,而这4个炮弹又坐落在一个9个炮弹组成的层面上,以此类推.写一个递归函数CannonBall,这个函数把 ...

  5. C语言---递归反向输出任意长度的字符串

    (该字符串可以包含空格和回车!) [题目要求] 编写一个递归函数,实现将输入的任意长度的字符串反向输出的功能. 例如输入字符串:ABCD,输出字符串:DCBA. [题目分析] 应用递归的思想有时可以很 ...

  6. C语言递归回溯法迷宫求解

    本例将随机产生一个10*10的迷宫输出后,在下面输出此迷宫的解法. 解法为从坐标(1,1)处进入,从(8,8,)出去,优先线路为先右后下再上最后为左. 不少人求解此题时运用的栈的相关知识,本例寻找线路 ...

  7. C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)

    今天写的是二叉树操作的实验,这个实验有三个部分: ①建立二叉树,采用二叉链表结构 ②先序.中序.后续遍历二叉树,输出节点值 ③销毁二叉树 二叉树的节点结构定义 typedef struct BiTNo ...

  8. C语言 递归 汉诺塔问题 最大公约数问题

    函数不能嵌套定义,但能嵌套调用(在调用一个函数的过程中再调用另一个函数) 函数间接或直接调用自己,称为递归调用  汉诺塔问题 思想:简化为较为简单的问题 n=2 较为复杂的问题,采用数学归纳方法分析 ...

  9. 理解C语言递归up_and_down

    函数调用.理解递归 对于程序,编译器会对其分配一段内存,在逻辑上可以分为代码段,数据段,堆,栈. 代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写 数据段:保存初始化的全局变量和静 ...

  10. C语言 · 递归求二项式系数值

    算法训练 6-1 递归求二项式系数值   时间限制:10.0s   内存限制:256.0MB      问题描述 样例输入 一个满足题目要求的输入范例.3 10 样例输出 与上面的样例输入对应的输出. ...

随机推荐

  1. Mybatis最入门---数据库的下载与安装

    [一步是咫尺,一步即天涯] 近期.因为工作进度调整,之前的Spring教程就先临时告一段落了,兴许找个时间继续更新,假设有那位看官想了解某个内容的,敬请留言,大家一起学习. 作为数据库工具的使用开篇. ...

  2. 第一篇 一步一步看透C++

        毕业快一年半了,这些时候,都是在底层方面做的一些工作,虽然内核的C也实现了C++中的一些抽象机制,面向对象,继承,多态,封装等等,但是,想着大学里面,电子类的学习,都是偏向底层的,有过C++的 ...

  3. php过滤字段htmlentities,htmlspecialchars,strip_tags

    1.strip_tags:过滤html标签比如<a> <html> <script> 如: $str = '<a href="test.html&q ...

  4. Windows下使用最新的JDK1.7.0_51以上版本连接Jenkins出现SecurityException

    我在slave节点上安装了jdk1.8, 当在节点上启动slave-agent的时候,报安全性限制的错误: java.lang.SecurityException: Missing required ...

  5. ABBYY FineReader操作技巧

    使用ABBYY FineReader OCR文字识别软件工作即快速又简单,软件自身常常可以自行处理一切工作,用户只需点击几下软件中的‘主要’按钮.不过,有时要想获得更好的质量结果,或者解决某个不寻常的 ...

  6. Apache+php5

    .下载回来的是解压文件,解压好放到要安装的位置.(我这里以D:\Acpache24为例) .打开Apache24\conf下httpd.conf 文件,用记事本打开即可. ()第37行ServerRo ...

  7. spring boot整合activemq消息中间件

    spring boot整合activemq消息中间件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...

  8. SSL证书/TLS证书是什么

    https://blog.csdn.net/donghaixiaolongwang/article/details/79193695 A. SSL协议与TLS是什么?它们的功能是什么? 答:SSL(S ...

  9. Java实现匿名内部类的简单应用

    在查看数码相片时,通常会使用一款图片查看软件,该软件应该能遍历文件夹下的所有图片并进行显示.编写程序,实现一个图片查看软件,它可以支持6张图片,通过单击不同的按钮就可以查看不同的图片. 思路分析:就是 ...

  10. ant 打批量渠道包,第三方项目作为library打包出错的问题

    ant批量打包不解释了.详情请看前面其它的blog! 这里说一下 开发中,非常可能遇到引用第三方的项目作为library情况.这样的情况下该怎么打包呢? 第一:改动build.xml 第二:在init ...