Function 递归与函数

Function 递归与函数,function,Function,谢谢你帮助大家。我会继续看,这样我才能更好地理解!我仍在努力学习递归,但我会进一步研究它。再次感谢你为帮助我付出的时间和努力 -/ int countEven(int-arr[i]){ //我不知道该怎么做…如何修复它。。。 int-evens=0; if(arr[i]0){ int digit=arr[i]%10;//获取最后一个数字 如果(数字%2==0){ evens=evens+1; } arr[i]=arr[i]/10; } 库特 参数必须具有简单名称,并且不需要与传入的表达式相同。a

谢谢你帮助大家。我会继续看,这样我才能更好地理解!我仍在努力学习递归,但我会进一步研究它。再次感谢你为帮助我付出的时间和努力 -/

int countEven(int-arr[i]){
//我不知道该怎么做…如何修复它。。。
int-evens=0;
if(arr[i]0){
int digit=arr[i]%10;//获取最后一个数字
如果(数字%2==0){
evens=evens+1;
}
arr[i]=arr[i]/10;
}
库特
参数必须具有简单名称,并且不需要与传入的表达式相同。
arr[i]
不是有效名称。此处使用的简单名称是
n

如果您的任务是编写一个递归函数,那么您不应该在这里使用循环。相反,请参见下文

这是获取最后一个数字以及除最后一个数字以外的所有内容的正确方法

这是确定最后一个数字是否为偶数的正确方法


现在,您需要结合您所拥有的,通过观察偶数数字的计数等于“如果最后一个数字是偶数,则为1,否则为0”,再加上偶数非最后一个数字的计数。本练习的目标是让您将“偶数非最后一个数字的计数”写成
countEven(n/10)

查看这些代码片段

int countEven(int n, bool first_time = true){
    static int total ;
    int num =n;

    if (first_time)
    {
        total = 0;
    }

    if (num <= 9) {
        return num % 2 == 0 ? 1 : 0;
    }

    int temp = num - (num / 10) * 10;
    num = num / 10;
    total += temp % 2 == 0 ? 1 : 0;
    countEven(num,false);

    return total;
}

int removeEven(int n){
    int result = 0;
    /*TODO*/
    return result;
}

bool hasEven(int n){
    return countEven(n);
}

void printStarDigit(int* arr){
    /*TODO*/
}

int range(int* arr, int n){
    int result = *arr;
    for (int i = 0; i < n; i++) {
        if (result < *(arr + i))  result = *(arr + i);
    }
    return result;
}

void reverse(int* arr, int n){
    int* temp = new int[n];
    for (int i = 0; i < n; i++) {
        *(temp + i) = *(arr + i);
    }

    for (int i = 0; i < n; i++) {
        *(arr + i) = *(temp + n - 1 - i);
    }

    delete[] temp;
}
int countEven(int n,bool first\u time=true){
静态整数合计;
int num=n;
如果(第一次)
{
总数=0;
}

如果(num你知道递归函数是什么吗?或者你知道如何传递参数吗?是的!你需要一个基本情况,然后你必须在函数中调用函数本身。我不知道如何传递数组的参数,这会使我感到困惑,如果不担心递归,你怎么计算i值中的偶数如果您必须手工操作?您需要一个偶数数字计数器。还需要使用%10单独读取每个数字
int countEven(int arr[i]){
//I'm not sure what to do here... how to fix it...
int evens = 0;
if(arr[i] <= 0) return 0; //base case
while(arr[i] > 0){
int digit = arr[i]%10; //get the last digit
arr[i] = arr[i]/10;
if(digit%2 == 0)
int countEven(int n, bool first_time = true){
    static int total ;
    int num =n;

    if (first_time)
    {
        total = 0;
    }

    if (num <= 9) {
        return num % 2 == 0 ? 1 : 0;
    }

    int temp = num - (num / 10) * 10;
    num = num / 10;
    total += temp % 2 == 0 ? 1 : 0;
    countEven(num,false);

    return total;
}

int removeEven(int n){
    int result = 0;
    /*TODO*/
    return result;
}

bool hasEven(int n){
    return countEven(n);
}

void printStarDigit(int* arr){
    /*TODO*/
}

int range(int* arr, int n){
    int result = *arr;
    for (int i = 0; i < n; i++) {
        if (result < *(arr + i))  result = *(arr + i);
    }
    return result;
}

void reverse(int* arr, int n){
    int* temp = new int[n];
    for (int i = 0; i < n; i++) {
        *(temp + i) = *(arr + i);
    }

    for (int i = 0; i < n; i++) {
        *(arr + i) = *(temp + n - 1 - i);
    }

    delete[] temp;
}
int main() {
    cout << "Part A:\n";
    int arr[3] = { 5050155, 5, 707070 };
    for (int i = 0; i < 3; i++) {
        cout << "countEven(" << arr[i] << ") = " << countEven(arr[i]) << endl;
        cout << "removeEven(" << arr[i] << ") = " << removeEven(arr[i]) << endl;
        cout << "hasEven(" << arr[i] << ") = ";


        if (hasEven(arr[i])) cout << "Yes" << endl;
        else cout << "No" << endl;
        printStarDigit(arr + i);
        cout << endl << endl;
    }

    cout << "Part B:\n";
    int a[4] = { 7, 2, 8, 3 };
    int b[5] = { 3, 4, 5, 6, 7 };
    cout << "The range of array a is " << range(a, 4) << endl;
    cout << "The range of array b is " << range(b, 5) << endl;
    reverse(a, 4);
    reverse(b, 5);
    cout << "Array a reversed: ";
    for (int i = 0; i < 4; ++i)
        cout << a[i] << " ";
    cout << endl;
    cout << "Array b reversed: ";
    for (int i = 0; i < 5; ++i)
        cout << b[i] << " ";
    cout << endl;
    return 0;
}