递归+归并排序
2025-06-17 08:18:35
发布于:北京
递归,就是指函数自己调用自己。递归其实还算简单,不过很容易就搞混。
注意:递归必须要有return,不然TLE。
一个视频了解递归的概念
样例:
首先,函数要判断你输入的数是否小于10,如果是,直接输出输入的数,然后退出循环。
void ddw(long long a){
if(a<10){
cout<<a;
return ;
}
}
接着,如果大于10,就需要a%10来求个位,并输出,接着再调用函数,就像这样
最后的代码:
#include <bits/stdc++.h>
using namespace std;
void ddw(long long a){
if(a<10){
cout<<a;
return ;
}
cout<<a%10;
ddw(a/10);
}
int main() {
long long a;
cin>>a;
ddw(a);
return 0;
}
都说到递归了,讲讲归并排序(愁)
归并排序唯一要注意的是代码量太大了
#include<iostream>
using namespace std;
int n , a[1010] , temp[1010];
void MergeSort(int l , int r){
//2.1、递归的结束条件:只有一个数,就不用再递归下去,直接返回
if(l==r)return ;
//2.2、找到中间位置,递归处理左半部分,递归处理右半部分
int mid = (l + r) / 2;
MergeSort(l,mid);
MergeSort(mid+1,r);
//3、合并,两个序列分别为[l,mid] 和 [mid+1,r],从最左边开始,依次比较,小的数放入结果数组temp,下标右移
int i = l, j = mid + 1, k = l;
while(i <=mid && j <= r)
{
if(a[i] <= a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
//3.1、判断两个序列是否有剩余,有剩余的,全部放入结果数组 temp
while(i <= mid)
temp[k++] = a[i++];
while(j <= r)
temp[k++] = a[j++];
//4、把结果数组 temp 重新赋给 a 数组
for(int i=l;i<=r;i++)a[i]=temp[i];
//5、输出a数组
for(int i = 1; i <= n; i++)
cout << a[i] << " ";
cout << endl;
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i];
//2、划分,左端点为 1,右端点为 n,递归处理
MergeSort(1 , n);
return 0;
}
这里空空如也
有帮助,赞一个