C语言递归练习
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语言递归练习的更多相关文章
- c语言递归讲解分析
C语言允许函数调用它自己,这种调用的过程称为"递归(recursion)" 举例说明,如下代码: #include <stdio.h> void up_and_down ...
- C语言递归,非递归实现翻转链表
翻转链表作为,链表的常用操作,也是面试常遇到的. 分析非递归分析: 非递归用的小技巧比较多,很容易出错. 递归分析比较简单,在代码里面 代码: #include<stdio.h> #inc ...
- 汉诺塔(河内塔)算法 ----C语言递归实现
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子, 在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺 ...
- C语言——递归练习
1.炮弹一样的球状物体,能够堆积成一个金字塔,在顶端有一个炮弹,它坐落在一个4个炮弹组成的层面上,而这4个炮弹又坐落在一个9个炮弹组成的层面上,以此类推.写一个递归函数CannonBall,这个函数把 ...
- C语言---递归反向输出任意长度的字符串
(该字符串可以包含空格和回车!) [题目要求] 编写一个递归函数,实现将输入的任意长度的字符串反向输出的功能. 例如输入字符串:ABCD,输出字符串:DCBA. [题目分析] 应用递归的思想有时可以很 ...
- C语言递归回溯法迷宫求解
本例将随机产生一个10*10的迷宫输出后,在下面输出此迷宫的解法. 解法为从坐标(1,1)处进入,从(8,8,)出去,优先线路为先右后下再上最后为左. 不少人求解此题时运用的栈的相关知识,本例寻找线路 ...
- C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)
今天写的是二叉树操作的实验,这个实验有三个部分: ①建立二叉树,采用二叉链表结构 ②先序.中序.后续遍历二叉树,输出节点值 ③销毁二叉树 二叉树的节点结构定义 typedef struct BiTNo ...
- C语言 递归 汉诺塔问题 最大公约数问题
函数不能嵌套定义,但能嵌套调用(在调用一个函数的过程中再调用另一个函数) 函数间接或直接调用自己,称为递归调用 汉诺塔问题 思想:简化为较为简单的问题 n=2 较为复杂的问题,采用数学归纳方法分析 ...
- 理解C语言递归up_and_down
函数调用.理解递归 对于程序,编译器会对其分配一段内存,在逻辑上可以分为代码段,数据段,堆,栈. 代码段:保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写 数据段:保存初始化的全局变量和静 ...
- C语言 · 递归求二项式系数值
算法训练 6-1 递归求二项式系数值 时间限制:10.0s 内存限制:256.0MB 问题描述 样例输入 一个满足题目要求的输入范例.3 10 样例输出 与上面的样例输入对应的输出. ...
随机推荐
- 基于ThinkPHP的在线编辑器调用
开源的在线编辑器有很多,比如FCKEditor,UEditor,Kindeditor等,调用方式也都大同小异 下面列举UEditor在线编辑器插件在ThinkPHP里面的应用 1.Ueditor下载地 ...
- 文字描边css
-webkit-text-stroke: 3.3px #2A75BF; -webkit-text-fill-color:#fff; 该方法在安卓端貌似不支持,显示为一团 或: -webkit-text ...
- Unity3D编辑器之不实例化Prefab获取删除更新组件
原文链接:http://www.xuanyusong.com/archives/3727
- CorelDRAW中如何复制对象属性详解
复制对象属性是一种比较特殊.重要的复制方法,它可以方便而快捷地将指定对象中的轮廓笔.轮廓色.填充和文本属性通过复制的方法应用到所选对象中.本教程将详解CorelDRAW中如何复制对象属性. Corel ...
- -webkit-user-select
-webkit-user-select: none;//不可选 -webkit-user-select: auto; //可复制
- PHP开发中,让var_dump调试函数输出更美观 ^_^#
前提:php必须安装Xdebug模块. 用var_dump打印输出时,输出的内容没有被格式化.如下图: 通常使用var_dump打印的内容是被格式化后输出的,如下图: 造成没有格式化输出的原因是因为p ...
- flexbox父盒子align-items属性
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- centos 安装五笔
没有五笔怎么打字!ctrl + alt + [F2 - F6]进入控制台模式f2 - f6是五个控制台,想进哪个进哪个!进入之后用alt + [F2 - F6]来切换不同的控制台输入root / 密码 ...
- python的输出问题
我们知道python提供了一个shell来供初学者学习,在shell里是输入一句执行一句,例如:
- fork(), waitpid()
NAME fork - create a child process SYNOPSIS #include <unistd.h> pid_t fork(void); RETURN VALUE ...