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

递归与函数求助:如何修正countEven函数的实现?

Fixing Your countEven Function

Hey there! Let's break down the issues in your code and fix them one by step. It looks like you're trying to count the number of even digits in a given integer—great goal, let's get this working properly.

First, Fix the Syntax & Parameter Issues

Your function declaration int countEven(int arr[i]) is invalid:

  • You don't need an array index here if you're processing a single number. The parameter should just be a single integer (e.g., int num).
  • Using arr[i] as a parameter doesn't make sense here unless you're passing an array element, but your logic is focused on digit-by-digit processing of a single number.

Next, Fix the Logic & Return Value

  1. Avoid modifying the input parameter: Instead of changing the input directly, create a temporary variable to hold the number we're going to process. This keeps the original input intact.
  2. Fix edge cases: Your current base case if(arr[i] <= 0) return 0 is incorrect—if the input is 0, it has one even digit, so we need to handle that separately. We should also account for negative numbers (digits are even/odd regardless of the sign).
  3. Return the result instead of printing it: Since your function is declared as returning an int, it should return the count of even digits rather than printing it directly. This makes the function reusable in other parts of your code.

Corrected Iterative Version

Here's the fixed code with explanations:

#include <iostream>
#include <cstdlib> // For abs() function
using namespace std;

int countEven(int num) {
    // Handle edge case: 0 has one even digit
    if (num == 0) {
        return 1;
    }
    
    // Convert negative numbers to positive (digits don't care about sign)
    num = abs(num);
    
    int evens = 0;
    while (num > 0) {
        int digit = num % 10; // Get the last digit
        if (digit % 2 == 0) {
            evens++; // Increment count if digit is even
        }
        num = num / 10; // Remove the last digit to process the next one
    }
    return evens; // Return the total count instead of printing
}

// Example usage to test the function
int main() {
    int testNum = 123456;
    cout << "Number of even digits: " << countEven(testNum) << endl;
    return 0;
}

Bonus: Recursive Version (Since You Mentioned Struggling with Recursion)

If you want to practice recursion with this problem, here's how to implement it. Recursion works by breaking the problem into smaller subproblems: count even digits in the last digit, then add that to the count from the remaining digits.

#include <iostream>
#include <cstdlib>
using namespace std;

// Helper recursive function
int countEvenRecursive(int num) {
    // Base case: no more digits left to process
    if (num == 0) {
        return 0;
    }
    
    int lastDigit = num % 10;
    // Add 1 if last digit is even, else add 0
    int currentCount = (lastDigit % 2 == 0) ? 1 : 0;
    
    // Recursive call: process the remaining digits (num / 10)
    return currentCount + countEvenRecursive(num / 10);
}

// Wrapper function to handle the 0 edge case
int countEven(int num) {
    if (num == 0) {
        return 1;
    }
    return countEvenRecursive(abs(num));
}

// Example tests
int main() {
    cout << countEven(0) << endl;       // Output: 1
    cout << countEven(1234) << endl;    // Output: 2
    cout << countEven(-789) << endl;    // Output: 1
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:06:25