C语言递归练习
来源:互联网 发布:喝咖啡会难怀孕吗 知乎 编辑:程序博客网 时间:2024/04/30 10:24
1、炮弹一样的球状物体,能够堆积成一个金字塔,在顶端有一个炮弹,它坐落在一个4个炮弹组成的层面上,而这4个炮弹又坐落在一个9个炮弹组成的层面上,以此类推。写一个递归函数CannonBall,这个函数把金字塔的高度作为参数,并且返回它所包括的炮弹数量。函数必须按照递归方式实现,不可以使用迭代结构,例如while或for。
int CannonBall(int h){if(h == 1) return 1;elsereturn CannonBall(h-1) + pow(h,2);}int main(void){printf("%d\n",CannonBall(4));return 0;}
2、使用C编写一个指数函数,实现n^k
int RaiseToPower(int n, int k){if(k == 0)return 1;elsereturn n * RaiseToPower(n,k -1);}int main(){printf("%d\n",RaiseToPower(3,4));return 0;}
3、使用欧几里得公式写一个递归函数gcd(m,n),用来计算m与n的最大公约数.
int gcd(int m, int n){if(m % n ==0)return n;elsereturn gcd(n,m % n);}int main(){printf("%d\n",gcd(18,4));return 0;}
4、写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
int DigitSum(int n){if(n < 10) return n;elsereturn ((n % 10) + DigitSum(n / 10));}int main(){printf("%d\n",DigitSum(1729));return 0;}
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 < 10) return n;elsereturn ((n % 10) + DigitSum(n / 10));}int DigitalRoot(int n){if(n < 10)return n;elsereturn DigitalRoot(DigitSum(n));}int main(){printf("%d\n",DigitalRoot(1729));return 0;}
6、计算组合数C(n,k)
int Comb(int n, int k){if(k == 0 || n == k) return 1; elsereturn (Comb(n - 1,k - 1) + Comb(n - 1,k));}int main(){int i;for(i = 0; i <= 6; i++){printf("%d ",Comb(6,i));}printf("\n");return 0;}
7、将十进制数转换为二进制数:
非递归算法:
void translate(int n) //将10进制转换为8位的二进制 { int a[10]; int i,j; i=0; while(1) { a[i++]=n%2; if(n/2==0) break; n/=2; } i--; for(j=1; j<8-i; j++) { printf("0"); } for(j=i; j>=0; j--) { printf("%d",a[j]); } }递归算法:
void binary(unsigned long n) { int r; r = n%2; if(n >= 2) binary(n / 2); putchar('0' + r); return; }
- C语言递归练习
- C语言练习 表达式的递归计算
- C语言练习 (典型递归问题)汉诺塔问题
- 递推递归练习 C
- 递推递归练习C
- 递推递归练习C
- 递推递归练习 C
- 《递归递推练习》C
- 递归递推练习 C
- C语言 阶乘递归
- C语言之递归
- C语言 -- 递归学习
- C语言递归
- 【C语言】递归实现。
- C语言实现-递归
- c语言递归函数
- 【C语言】递归 - 汉诺塔
- C语言递归实验
- 开散列方法、闭散列方法
- 视频编码方案之间的比较(HEVC,H.264,MPEG2等)
- 支持动态维护的堆排序
- STL知识点
- 啊哈!算法:三个算法问题(左旋转,大数据,变位词集)
- C语言递归练习
- 推荐本人关于Android的一些学习资料
- hdu1541 树状数组
- oracle之存储过程
- KDD字符设备基本概念
- ffmpeg参数说明(转载)
- Unity3D Update() 和 FixedUpdate()区别--unity3Dday02
- Oracle DB启动
- php拓展开发之模块全局变量