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

 int CannonBall(int h)
{
if(h == ) return ;
else
return CannonBall(h-) + pow(h,);
} int main(void)
{
printf("%d\n",CannonBall());
return ;
}

C代码

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

 int RaiseToPower(int n, int k)
{
if(k == )
return ;
else
return n * RaiseToPower(n,k -);
} int main()
{
printf("%d\n",RaiseToPower(,));
return ;
}

C代码

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

 int gcd(int m, int n)
{
if(m % n ==)
return n;
else
return gcd(n,m % n);
} int main()
{
printf("%d\n",gcd(,));
return ;
}

C代码

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

 int DigitSum(int n)
{
if(n < )
return n;
else
return ((n % ) + DigitSum(n / ));
} int main()
{
printf("%d\n",DigitSum());
return ;
}

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),返回参数的根,注意:写一个纯粹的、不使用任何循环结构的递归函数。

 int DigitSum(int n)
{
if(n < )
return n;
else
return ((n % ) + DigitSum(n / ));
} int DigitalRoot(int n)
{
if(n < )
return n;
else
return DigitalRoot(DigitSum(n));
} int main()
{
printf("%d\n",DigitalRoot());
return ;
}

C代码

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

 int Comb(int n, int k)
{
if(k == || n == k)
return ;
else
return (Comb(n - ,k - ) + Comb(n - ,k));
} int main()
{
int i;
for(i = ; i <= ; i++)
{
printf("%d ",Comb(,i));
}
printf("\n");
return ;
}

C代码

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

 #include<stdio.h>

 void printd(int n)
{
if(n < ) {
putchar('-');
n = -n;
}
if(n / )
printd(n / );
putchar(n % + '');
} int main()
{
int a = ;
printd(a);
printf("\n");
return ; }

C代码

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

 #include<stdio.h>

 void itoa(int n, char *s)
{
static int i;
if(n / )
itoa(n / , s);
else {
i = ;
if(n < )
s[i++] = '-';
}
s[i++] = abs(n) % + '';
s[i] = '\0';
} int main()
{
char s[];
int n = ;
itoa(n, s);
printf("%s\n",s);
return ; }

C代码

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

 #include<stdio.h>

 void reverser(char *s, int i, int len)
{
int c, j;
j = len - (i + );
if(i < j) {
c = s[i];
s[i] = s[j];
s[j] = c;
reverser(s, ++i, len);
}
} void reverse(char *s)
{
int len;
len = strlen(s);
reverser(s, , len);
} int main()
{
char s[];
gets(s);
reverse(s);
printf("%s\n",s);
return ;
}

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. nodejs npm 使用淘宝 NPM 镜像

    使用淘宝 NPM 镜像 大家都知道国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像. 淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读), ...

  2. php 获取某文件内容

    获取某文件下 的文件夹和文件 public function dirRead($dir=''){ //$dir = './upload/images'; $result = ''; if (is_di ...

  3. 解决计算机改名无法连接TFS的问题

    闲着没事改了下计算机名字,结果造成TFS无法连接. 报错讯息如下: ---------------------------Microsoft Visual Studio---------------- ...

  4. 求字符串长度StringLength();

    // StringLength2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int StringLength(char str[]) ...

  5. windows 环境内网超快同步 DFS

    记录下: 在WINDOWS环境下,内网同步使用DFS可以超快实现文件同步,效果非常OK 纯粹记录下!

  6. MySQL自定义排序函数FIELD()

    MySQL可以通过field()函数自定义排序,格式:field(value,str1,str2,str3,str4),value与str1.str2.str3.str4比较,返回1.2.3.4,如遇 ...

  7. node.js富文本编辑器

    摘要: 最近在搭建自己的博客,这一段时间可能没有时间来写博客了,但是有了好东西还是要分享给大家.博客网站必然要有编辑文章的编辑器,所以在网上查了些资料.大部分编辑器的后台是基于java.php.asp ...

  8. python使用pyqt写带界面工具

    上篇介绍的使用python自带tkinter包,来写带界面的工具. 此篇介绍使用pyqt来开发测试工具. tkinter的好处是python官方自带,上手容易(但手写控件复杂),布局和摆放都不直观和容 ...

  9. linq to xml 初学 -- 查询语法

    初学linq  to xml,很方便 string path = ch.GetConfigFile("")+ "SpeedDial.xml"; var sdDo ...

  10. ssh面试题总结

    SSH面试题总结: 题目1:Hibernate工作原理及为什么要用? 原理: hibernate,通过对jdbc进行封装,对 java类和 关系数据库进行mapping,实现了对关系数据库的面向对象方 ...