【发布时间】:2022-01-08 03:25:05
【问题描述】:
这是使用递归反转数组的代码
使用 return rev(arr,++start,--end);
#include <iostream>
using namespace std;
void rev(int arr[],int start,int end)
{
if(start >= end)
{
return;
}
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
return rev(arr,++start,--end);
}
void reverse(int arr[],int size)
{
rev(arr,0,size-1);
}
使用 rev(arr,++start,--end);
void rev(int arr[],int start,int end)
{
if(start >= end)
{
return;
}
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
rev(arr,++start,--end);
}
void reverse(int arr[],int size)
{
rev(arr,0,size-1);
}
它们都给出相同的输出 7 6 5 4 3 2 1
这里使用return和不使用return和rev有什么区别?
【问题讨论】:
-
在这个具体的例子中没有区别,因为
return是函数的最后一条语句,而被“返回”的东西是void。您可以通过比较编译器输出来确认这一点。它们是相同的。 -
感谢您的回复。我是递归新手,请您通过其他示例进行解释。
-
在许多情况下,您希望从递归中返回一个值,但在这种情况下,该函数是一个 void 函数
-
由于
rev()返回void,return rev(arr,++start,--end);在净效应上等同于rev(arr,++start,--end); return;或(因为它是关闭}之前函数中的最后一条语句)到@987654330 @