You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++递归函数能否调用外部函数?购物车课程项目实现咨询

问题解答

递归函数完全可以调用其他外部/成员函数,没有任何语法限制,你的需求可正常实现。
由于作业要求的ShoppingCart类对外公共接口固定,无额外入参,而递归逻辑需要传递当前遍历下标作为参数,我们通过新增私有递归辅助函数的方式实现,不会改动要求的对外接口。

第一步:修改ShoppingCart.h头文件

在类的私有部分新增两个递归辅助函数声明:

class ShoppingCart {
public:
    ShoppingCart();
    double GetCostofCart();
    void PrintTotal();
private:
    vector< ItemToPurchase > cartItems;
    // 新增递归辅助函数声明
    double RecurCalcCost(int index);
    void RecurPrintItems(int index);
};

第二步:修改ShoppingCart.cpp的GetCostofCart实现

用递归替换原有for循环计算总成本:

// 递归计算购物车总成本的辅助函数
double ShoppingCart::RecurCalcCost(int index) {
    // 递归终止条件:遍历完所有商品
    if (index >= cartItems.size()) {
        return 0.0;
    }
    // 计算当前商品成本 + 递归计算后续所有商品成本
    double currentCost = cartItems.at(index).GetPrice() * cartItems.at(index).GetQuantity();
    return currentCost + RecurCalcCost(index + 1);
}

double ShoppingCart::GetCostofCart() {
    // 从第一个商品开始递归计算
    return RecurCalcCost(0);
}

注:原代码中costofCart定义为int类型会丢失double精度,已修正。

第三步:修改ShoppingCart.cpp的PrintTotal实现

用递归替换原有for循环打印商品明细:

// 递归打印所有商品明细的辅助函数
void ShoppingCart::RecurPrintItems(int index) {
    // 递归终止条件:遍历完所有商品
    if (index >= cartItems.size()) {
        return;
    }
    // 调用ItemToPurchase的成员函数打印当前商品
    cartItems.at(index).PrintItemCost();
    cout << " " << endl;
    // 递归打印下一个商品
    RecurPrintItems(index + 1);
}

void ShoppingCart::PrintTotal() {
    if (cartItems.empty()) {
        cout << "Shopping cart is empty" << endl;
        return;
    }
    // 从第一个商品开始递归打印
    RecurPrintItems(0);
    cout << "Total: $" << GetCostofCart() << endl;
}

补充修正说明

你的ItemToPurchase.h头文件缺少必要的成员声明,需要补上才能正常编译:

class ItemToPurchase {
public:
    ItemToPurchase();
    void PrintItemCost();
    // 补上getter函数声明,供ShoppingCart调用
    double GetPrice();
    int GetQuantity();
private:
    std::string itemName; // 补上itemName成员变量
    double itemPrice;
    int itemQuantity;
};

原有main.cpp、ItemToPurchase.cpp的代码无需修改,完全兼容现有调用逻辑。

内容的提问来源于stack exchange,提问作者Cheryl Nielsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:54:03