折半求和(递归调用)
2016-04-13 18:11
218 查看
递归求解:数组中的所有数值之和。
递归思路:
1.递归每次只考虑当前任务中的一个子任务。
例如:一个经理,他有一项任务,需要处理100以内的求和,而他很懒...,他只处理其中的一项(1),剩下的丢给下一级处理f(99);而下一级有同样只处理这个任务其中一项(2),剩下的又丢给下一级f(98),...,直到该任务没有数据,则开始返回给上一级。
所以,本例中当前需要处理的子任务是:左半部分f(begin,mid)+右半部分f(mid+1,end),内部的求和'丢'给下一级调用。
2.递归结束条件
只有当begin == end 时,两者处理的是同一个数值,则返回该值。
递归思路:
1.递归每次只考虑当前任务中的一个子任务。
例如:一个经理,他有一项任务,需要处理100以内的求和,而他很懒...,他只处理其中的一项(1),剩下的丢给下一级处理f(99);而下一级有同样只处理这个任务其中一项(2),剩下的又丢给下一级f(98),...,直到该任务没有数据,则开始返回给上一级。
所以,本例中当前需要处理的子任务是:左半部分f(begin,mid)+右半部分f(mid+1,end),内部的求和'丢'给下一级调用。
2.递归结束条件
只有当begin == end 时,两者处理的是同一个数值,则返回该值。
#include <stdio.h> #define N 1000 int f(int* a,int begin,int end,int length){ int middle = (begin+end)/2; //取中值 if(begin<end){ return f(a,begin,middle,length)+f(a,middle+1,end,length); } if(begin==end){ return a[end]; } } int main(void){ int a ={1,5,2,4,3}; int n=5; int length=n; int sum = f(a,0,n-1,length); printf("%d",sum); return 0; }
相关文章推荐
- 运维必须掌握的Linux面试题【转自CentOS中文站】
- 栅栏布局
- BZOJ4530: [Bjoi2014]大融合
- android 获取 imei号码
- android4.0.3源码之wifi的简单分析(转)
- 远程linux服务器mysql数据库导入和导出.sql文件
- 判断是否为16进制字符串
- day02
- RabbitMQ介绍
- [Java]模拟实现大整数类
- Unity 碰撞检测,触发检测,方向键控制物体移动
- [Java] 将标准字符流写入到文件中(通过控制台写一个html程序,并保存)
- java strtus2 DynamicMethodInvocation配置(二)
- mysql连结查询
- 多线程
- 【Leetcode】:Single Number II问题 in Go语言
- eclipse平台如何实用Marker来实现Problem View的输出
- UIKit框架-高级控件Swift版本: 9.UINavigationController方法/属性详解
- 苹果审核相关
- 鸟哥书籍awk工具学习