甚至可以在没有任何循环的情况下执行递归函数吗?
我正在研究没有任何循环的递归排序函数。该程序的任务是将整数从大到小排序。这是我的代码:
#include <bits/stdc++.h>
using namespace std;
void insert(vector<int> &v, int val)
{
if(v.size() == 0 || v[v.size() +1] <= val)
{
v.push_back(val);
return;
}
int temp = v[v.size() -1];
v.pop_back();
insert(v, val);
v.push_back(temp);
}
void recursiveSort(vector<int> &v)
{
if(v.size() == 1)
{
return;
}
int val = v[v.size() -1];
v.pop_back();
recursiveSort(v);
insert(v, val);
}
int main() {
vector<int> v{8,2,3,6,5,8,7,9,1};
recursiveSort(v);
for(int x : v)
cout << x << " ";
return 0;
}
输出应该如下所示:
Enter 4 integer values: 8 1 6 4
itr1:0 itr2:0 array:8,1,6,4
itr1:0 itr2:1 array:8,1,6,4
itr1:0 itr2:2 array:1,8,6,4
itr1:0 itr2:3 array:1,8,6,4
itr1:1 itr2:0 array:1,8,6,4
itr1:1 itr2:1 array:8,1,6,4
itr1:1 itr2:2 array:8,1,6,4
itr1:1 itr2:3 array:8,1,6,4
itr1:2 itr2:0 array:8,1,6,4
itr1:2 itr2:1 array:8,1,6,4
itr1:2 itr2:2 array:8,6,1,4
itr1:2 itr2:3 array:8,6,1,4
itr1:3 itr2:0 array:8,6,1,4
itr1:3 itr2:1 array:8,6,1,4
itr1:3 itr2:2 array:8,6,1,4
itr1:3 itr2:3 array:8,6,4,1
这就是代码在循环中的样子:
f o r ( int i t r 1 = 0 ; i t r 1 < 4 ; i t r 1++ ) {
f o r ( int i t r 2 = 0 ; i t r 2 < 4 ; i t r 2++ ) {
c o u t <<” i t r 1 : ”<< i t r 1 <<” i t r 2 : ”<< i t r 2 << ” a r r a y : ” ;
c o u t <<a r r [0]<<” , ”<<a r r [1]<<” , ”<<a r r [2]<<” , ”<<a r r [3]<< e n d l ;
i f ( arr [ i t r 1 ] > arr [ i t r 2 ] ) {
int temp = a r r [ i t r 1 ] ;
arr [ i t r 1 ] = arr [ i t r 2 ] ;
a r r [ i t r 2 ] = temp ;
}
}
}
回答1
是的,这是可能的。下面是一个使用递归函数没有任何循环的 https://www.geeksforgeeks.org/selection-sort/ 示例:
#include <stdio.h>
#include <iostream>
using namespace std;
void recursiveSort(int arr[], int i, int j);
const int arrayLength = 10;
int main()
{
int arr[10] = {3, 6, 1, 0, 7, 2, 5, 4, 6, 9};
cout << "before sorting: " << endl;
for (auto element : arr){
cout << element << ' ';
}
recursiveSort(arr, 0, 1);
cout << endl << "after sorting: " << endl;
for (auto element : arr){
cout << element << ' ';
}
}
void recursiveSort(int arr[], int i, int j)
{
if (j == arrayLength){
return;
}
if (arr[i] < arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
recursiveSort(arr, i, j + 1);
recursiveSort(arr, i + 1, i + 2);
}