欢迎来到天天文库
浏览记录
ID:20896316
大小:51.50 KB
页数:3页
时间:2018-10-17
《一步一步写算法(之循环与递归)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一步一步写算法(之循环和递归)【声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing@163.com】 其实编程的朋友知道,不管学什么语言,循环和递归是两个必须学习的内容。当然,如果循环还好理解一点,那么递归却没有那么简单。我们曾经对递归讳莫如深,但是我想告诉大家的是,递归其实没有那么可怕。所谓的递归就是函数自己调用自己而已,循环本质上也是一种递归。 1)求和递归函数 我们可以举一个循环的例子,前面我们说过,如果编写一个1到n的求和函数怎么写呢,你可能会这么写:1.int calculate(int m) 2.{ 3. int count
2、= 0; 4. if(m <0) 5. return -1; 6. 7. for(int index = 0; index <= m; index++) 8. count += index; 9. 10. return count; 11.} intcalculate(intm){intcount=0;if(m<0)return-1;for(intindex=0;index<=m;index++)count+=index;returncount;} 上面只是一个示范。下面我们看看如果是递归应该怎么写呢?1.int
3、 calculate(int m) 2.{ 3. if(m == 0) 4. return 0; 5. else 6. return calculate(m -1) + m; 7.} intcalculate(intm){if(m==0)return0;elsereturncalculate(m-1)+m;} 大家看着两段代码有什么不同? (1)第一段代码从0,开始计算,从0到m逐步计算;第二段代码是从10开始计算,逐步到0之后这回,这样同样可以达到计算的效果 (2)第一段代码不需要重复的压栈操作,第二段需要重复的函数操作
4、,当然这也是递归的本质 (3)第一段代码比较长,第二段代码较短 2)查找递归函数 大家可能说,这些代码有些特殊。如果是查找类的函数,有没有可能修改成递归函数呢?1.int find(int array[], int length, int value) 2.{ 3. int index = 0; 4. if(NULL == array
5、
6、 0 == length) 5. return -1; 1. 2. for(; index < length; index++)3. {4. if(value == array
7、[index])5. return index;6. } 7. 8. return -1;9.}intfind(intarray[],intlength,intvalue){intindex=0;if(NULL==array
8、
9、0==length)return-1;for(;index10、int array[], int length, int value)2.{ 3. if(index == length)4. return -1;5. 6. if(value == array[index])7. return index;8. 9. return _find(index + 1, array, length, value);10.}11. 12.int find(int array[], int length, int value)13.{ 14. if(NULL == array 11、12、 length =13、= 0)15. return -1;16. 17. return _find(0, array, length, value);18.}int_find(intindex,intarray[],intlength,intvalue){if(index==length)return-1;if(value==array[index])returnindex;return_find(index+1,array,len
10、int array[], int length, int value)2.{ 3. if(index == length)4. return -1;5. 6. if(value == array[index])7. return index;8. 9. return _find(index + 1, array, length, value);10.}11. 12.int find(int array[], int length, int value)13.{ 14. if(NULL == array
11、
12、 length =
13、= 0)15. return -1;16. 17. return _find(0, array, length, value);18.}int_find(intindex,intarray[],intlength,intvalue){if(index==length)return-1;if(value==array[index])returnindex;return_find(index+1,array,len
此文档下载收益归作者所有