我在 C++ 中实现了一个简单的递归平均计算器,其中“学生”必须输入他们的成绩,函数返回他们的平均值。但我想知道除了不使用递归之外,使用递归是否有任何优势。
这是代码:
/*
*@brief This code is an implementation of a recursive media calculator function which was made
* for practice Algorithms and Data Structure.
* Autor: Kayque Amado
* Date: 19/04/2024
*/
#include <iostream>
using namespace std;
#define NUM_GRADES 5
uint8_t control = 0;
float media = 0;
float Media(int *grade);
int main()
{
int grades[NUM_GRADES];
for(int i = 0; i < NUM_GRADES; i++) //grades input
{
cin >> grades[i];
}
Media(grades);
cout << "Media: " << media;
return 0;
}
float Media(int *grade)
{
if(control == NUM_GRADES) //base case
{
media = media/NUM_GRADES;
return media;
}
else{ //recursive case
media += *grade;
control++;
grade++;
return Media(grade);
}
return 0;
}
我希望更多地了解这种解决问题的工具。
存在一些问题,即递归是一种“自然”的执行方式,例如遍历树 - 尝试以迭代方式执行通常会导致您以比“自然”堆栈更复杂的方式显式跟踪路径递归执行时的用法。
但是,对于并非如此的问题,例如计算阶乘,迭代循环通常更容易阅读/理解,并且除非编译器检测并消除递归,否则迭代循环也更高效。
换句话说,只有当递归使事情变得更容易时才使用它;不要执行“教科书”递归,某些计算机科学教科书向您展示了获取字符串长度的递归实现。这些都是学术例子,没有实际用途。