玩转递归

news/2024/6/29 12:17:57 标签: 递归算法, 等差数列求和, 递归

玩转递归

最近接触了递归,一直在思考递归我们什么时候用?不可否认的是递归会减少很多代码量,使得代码看起来很简洁,但它也存在一定的缺点,滥用定会造成栈溢出的情况。刚好做到了一个关于求和的算法的设计题,重新思考了下,果断把递归应用上去看下效果,但如果求和的项数太多还是不建议使用递归,容易造成栈溢出。这里只是好奇心驱动我尝试哈。一个是关于前N个数求和的算法PK,一种是普通的累计加起来,另外一种是采用递归的形式。

int Sum(int m,int n)//要求输出的参数从最低的m加到n
{
int sum=0;
if(m > n)//合法性检测
{
sum
-1;/ 非法输入标志
}
else
{
while(m<=n)//从最低的那个数字开始加起来,知道m
{
sum +=m;
m++;
}
}
return sum;
}
int Sum
Re(int m,int n)//递归
{
if(m <= n)
{
return Sum
Re(m+1,n)+m;//对于后面有m,因此前面不能采用++m,这是因为++m之后m的值发生更新,影响后面的m!!
}
else //当m值超过n的时候终止条件
{
return 0;
}
}

int main()//代码测试,运算结果都是5005,运行平台VS2010
{
printf("普通计算结果:%d",Sum(10,100));
printf("递归计算结果:%d",SumRe(10,100));
while(1);
return 0;
}

结论:只要算法的模型符合具有栈结构的设计思路的,同时具有递归结束条件的都可以用递归来设计。不过递归使用请慎用,切勿滥用。


http://www.niftyadmin.cn/n/1234457.html

相关文章

MFC学习之split button使用

MFC学习之split button使用 鄙人之前学了下QT&#xff0c;QT控件封装得太美好了&#xff0c;使用得多了程序员真的会上瘾。由于近期想要深入的学习C方面的知识。不得不接触到MFC&#xff0c;下午折腾了下&#xff0c;彻底弄清楚了MFC中split button的使用&#xff0c;其他博文…

ACL访问控制列表--原理,配置与验证

一、功能 匹配路由过滤数据报文&#xff08;一定要运用到物理接口或逻辑接口&#xff09; 二、特点 ACL是思科IOS定义流量的工具ACL是基于IP报文及以上报文定义流量ACL包含允许和拒绝的表项&#xff0c;由上向下进行操作&#xff0c;第一个报文执行允许或者拒绝后&#xff0c…

MFC学习之List Control的使用

MFC学习之List Control的使用今天学习的是类似于excel表的控件List Control&#xff0c;MFC的制表不能像excel表那样子直接在上面输入的&#xff0c;只能借助函数对里面的各个选项进行填写。今天我们会结合子对话框的方式实现对List Control里面进行添加项。本次工程最后实现效…

Python函数的定义

Python函数的定义函数定义函数参数递归函数函数定义 #!/usr/bin/evn python3 #-*- coding:UTF-8 -*-import math #调用math数据包 math.pi math.sin() math.cos() math.sqrt()def my_abs(x): #def 函数名 括号 参数 冒号if not isinstance(x, (int, float…

代码修养第二堂

代码修养第二堂今天主要补充下上一节课代码修养第一讲如何减少代码的出口&#xff0c;提高维护的效率。上一讲主要说的是减少return的使用&#xff0c;在很多大公司都有明确的要求程序员函数只能有一个出口。回顾上次内容主要的方法是引入了标志位来减少return出口数量。今天我…

QT实现快捷键的三种方式

QT实现快捷键的三种方式今天下午开发类似于QQ的聊天软件的时候&#xff0c;需要用到键盘快捷键的开发&#xff0c;下面我以在QLineEdit这个控件为例&#xff0c;在用户输入文本之后&#xff0c;想要输入enter健直接快速的发送编辑好的信息。 1、方法一&#xff0c;用信号和槽机…

pcap数据包解析及数据特征提取

pcap数据包解析及数据特征提取pcap数据包解析及数据特征提取代码pcap数据包解析及数据特征提取代码 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<time.h> #pragma pack(1) #define BUFSIZE 1526 #defi…

Linux上面用QCreator搭载opencv工程的创建

Linux上面用QCreator搭载opencv工程的创建怎么在Linux下既可以创建美好和谐的图形GUI&#xff0c;又可以享用opencv的图像处理库带来的享受&#xff1f;今天让我们走进QT那些不为人知的奥秘&#xff0c;揭示QT搭载第三方库的面纱。QT的便捷开发的确是赢得了不少程序员的喜爱&am…