小议递归算法
来源:互联网 发布:电脑配置升级软件 编辑:程序博客网 时间:2024/05/30 23:04
一,含义:
在函数或子过程的内部,直接或者间接地调用自己的算法。
二,特点:
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。
三,设计递归算法
1.确定递归公式
2.确定边界条件--出口
四,代码实现:
//实例: 翻转字符串#include <stdio.h>void revers(char *cs);int main(void){ revers("123456789"); getchar(); return 0;}void revers(char *cs){ if (*cs) { revers(cs + 1); putchar(*cs); }}
//实例: 阶乘#include <stdio.h>int factorial(int num);int main(void){ int i; for (i = 1; i <= 9; i++) printf("%d: %d/n", i, factorial(i)); getchar(); return 0;}int factorial(int num){ if (num == 1) return(1); else return(num * factorial(num-1));}
//实例: 整数转二进制#include <stdio.h>void IntToBinary(unsigned num);int main(void){ IntToBinary(255); /* 11111111 */ getchar(); return 0;}void IntToBinary(unsigned num) { int i = num % 2; if (num > 1) IntToBinary(num / 2); putchar(i ? '1' : '0'); // putchar('0' + i); /* 可代替上面一句 */}
//实例:求 1+2+3+...+n 的和 #include <stdio.h>int sum(int n){int ret;if (n==0) return 0;if (n==1) return 1;if ( n>=2 )ret = n + sum(n-1);return ret;} int main(){printf("sum(100)=%d\n", sum(100));return 0;}
以上方法仅供参考!
文明看帖,谢谢勿喷!
有更好的方法欢迎交流!
0 0
- 小议递归算法
- 小议算法
- 抖动算法小议1
- 抖动算法小议2
- 抖动算法小议3
- 剪枝算法小议
- 抖动算法小议
- 小议垃圾回收算法
- 小议垃圾回收算法
- 搜索中的剪枝算法小议
- 抖动算法小议(转)
- 程序设计小议递归与迭代
- 笔试面试中的算法题小议
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- 递归算法
- Java的位操作
- 用c语言实现作曲与播放教程~,原创哦~
- 最好使用C++转型操作符
- php oauth v1.0 配置
- Android BlueTooth蓝牙知识全解
- 小议递归算法
- 算法学习系列之二章---KMP算法图解
- HDU 1864 最大报销额(DP,01背包)
- lua面向对象是怎么实现的
- ssh key配置
- 技术领导和招聘
- apache不允许目录列出索引
- 表单序列化,jq中的serialize
- 白话AHP层次分析法