实现递归作为解决问题的工具有哪些权衡?

问题描述 投票:0回答:1

我在 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;
}

我希望更多地了解这种解决问题的工具。

c++ algorithm recursion stack
1个回答
0
投票

存在一些问题,即递归是一种“自然”的执行方式,例如遍历树 - 尝试以迭代方式执行通常会导致您以比“自然”堆栈更复杂的方式显式跟踪路径递归执行时的用法。

但是,对于并非如此的问题,例如计算阶乘,迭代循环通常更容易阅读/理解,并且除非编译器检测并消除递归,否则迭代循环也更高效。

换句话说,只有当递归使事情变得更容易时才使用它;不要执行“教科书”递归,某些计算机科学教科书向您展示了获取字符串长度的递归实现。这些都是学术例子,没有实际用途。

© www.soinside.com 2019 - 2024. All rights reserved.