专栏文章
题解:P5718 【深基4.例2】找最小值
P5718题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipd23fm
- 此快照首次捕获于
- 2025/12/03 10:01 3 个月前
- 此快照最后确认于
- 2025/12/03 10:01 3 个月前
P5718 【深基4.例2】找最小值
题意
输入n个非负整数,求最小值。
分析
通过题意易得要比较这n个数,求最小值,而左右比较又是一个重复的事情,这里就可以使用递归。
递归思想
递归(Recursion)指函数直接或间接调用自身来解决问题的方法。递归通常用于解决可以分解为相同结构的子问题的情况。
递归的基本要素
1.递归基(Base Case)
我们知道函数中可以调用自身,但如果每次执行都会调用就会死循环,而递归基就是循环的终止条件,防止死循环。
2.递归关系(Recursive Case)
递归思想是将问题分解为更小的子问题,并通过调用自身解决的思想。所以使用递归时要将问题拆分。将大问题拆分成子问题,再将他们联系起来。
递归实现
本题递归关系就是比较前n−1个数的最小值和第n个数。
设findmin(i)为从1到i的最小值,所以本文的递归关系就是findmin(x)=min(a[x],findmin(x-1))(min函数头文件为,返回值是两个参数之间的最小值)。
而本文递归基也显而易见能看出是x!=1。
代码
CPP#include<iostream>
#include<algorithm>//min函数头文件
using namespace std;
int n,a[1005];//数组开大五个,防止越界。定义全局变量方便函数调用。
int findmin(int x)
{
if(x==1)return a[1];
return min(a[x],findmin(x-1));
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
cout<<findmin(n);//调用函数直接输出
return 0;
}
递归实现,时间复杂度O(n)(n次比较),空间复杂度O(n)(递归的栈空间)。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...