递归函数的使用-以C++语言为例
来源:互联网 发布:linux用户和组的关系 编辑:程序博客网 时间:2024/05/05 11:08
首先我来谈一下递归的定义:递归过程一般通过函数或子过程来实现。递归方法:在函数或子过程的内部,直接或者间接地调用自己的算法。可以简单的表示成fun( r ) { fun( k ) }。当然这个递归是个死循环,永远不停的递归,所以对于递归,必须有一个出口,用来结束递归函数的调用,并返回结果,类似于循环结构的终止条件。所以递归和循环也可以是等价的。
下面我们来讨论一下递归的优缺点:
优点很明显,代码简短。
缺点:运行效率低下;容易造成栈的溢出。
下面我就以C++程序为例,通过使用二分法求一个方程如 x * x - 10 * x 在某个区间上的根。代码如下:
#include <iostream>
#include <cmath>using namespace std;inline float fx(float x){return x * x - 10 * x;}float fun(int l, int r){int m = (l + r) / 2;
float yl, yr, ym;yl = fx(l);yr = fx(r);ym = fx(m);
<span style="white-space:pre"></span>//递归的出口条件(精度范围)if(fabs(ym) <= 1e-6)return m;
<span style="white-space:pre"></span>//中间变量的函数值与右侧变量的函数值同号,此时,左侧变量不变,只需要将中间变量转换成新的右侧变量进行新一轮的递归操作即可。if(ym * yr >0){return fun(l, m);}
<span style="white-space:pre"></span>//此时<span style="font-family: arial, 宋体, sans-serif;">中间变量的函数值与右侧变量的函数值异号,说明在这两个端点之间必定有一个方程的根。 此时,右侧变量不变,只需要将中间变量</span>
<span style="font-family: arial, 宋体, sans-serif;"> // </span><span style="font-family: arial, 宋体, sans-serif;">转换成新的左侧变量进行新一轮的递归操作即可。</span>
else//(ym * yr <0){return fun(m, r);}}int main(){int l, r;cout << "请分别输入l, r" << endl;cin >> l >> r;cout<<endl;while( fx(l) * fx(r) > 0 )//确保两个{cout << "你刚刚输入的数值无效,请重新输入l, r" << endl;cin >> l >> r;}cout << "最终求得的方程的解是:" << fun(l, r) << endl;return 0;}
二分算法比较容易理解:对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。当采用二分法时,必须保证所选择的两个端点的函数值的乘机必须是异号的,这样才能保证在这个区间内方程必有一根。
通过递归方式我们可以求得这个方程的近似解。在下一节的博客里,我们继续以这个方程为例,通过采用数组的方式来实现,同时比较这两种实现方式的效率。
以下是程序的运行结果的截图:
0 0
- 递归函数的使用-以C++语言为例
- 递归函数的使用-以C++语言为例(下)
- C语言之递归函数的使用
- 递归函数的调用过程,以汉诺塔为例
- 函数递归调用(c语言为例)
- C语言函数的递归
- c语言----函数的递归
- C语言使用函数递归判断栈的生长方向
- C语言中的可变参数函数的浅析(以Arm 程序中的printf()函数实现为例)
- C语言中的可变参数函数的浅析(以Arm 程序中的printf()函数实现为例) .
- 果然,C语言就不贱嗖嗖的:以realloc为例
- 编写C语言跨平台函数(以清屏和休眠函数为例)
- <C语言>函数的值传递与地址传递--以输入三个数并从小到大排列为例
- C语言以函数为程序的基本单位,有什么好处?
- c语言递归函数
- C语言 函数递归
- 递归函数与迭代的比较(以n的k次幂为例)
- C语言实现:函数的递归调用
- myeclipse10安装没有common,分别装到了两个文件夹
- XML语言的学习1---方立勋教程
- C++ 中类函数占用存储空间的问题
- Oracle的存储过程
- 求1-n位数的所有数
- 递归函数的使用-以C++语言为例
- 首感首悟与首思
- cocos2dx lua项目学习一 创建lua项目
- MyEclipse2014a 最简单最有效的汉化方法---eclipse和其他版本通用
- Java中的值传递与引用传递
- 网络协议
- 直接插入排序算法 C语言版
- C++ 虚函数表解析【转载】
- 发现一号店首页曝出重大XSS漏洞,在IE8,IE9,IE10上均有此漏洞