首页 > 解决方案 > 我使用数组编写递归函数时犯了什么错误?

问题描述

#include <stdio.h>
#include <math.h>

int prod(int arr[], int n) {
    
    if (arr[n-1] < 0) {
        return 1;
    }

   return ((arr[n-1]) * (prod(arr[n-2] , n)));

}

int main( int argc, char* args[] ) {

    int arr[] = {2 , 3};

    printf("%d" , prod(arr , 2));
}

我不断收到与指针相关的错误,但不知道要更改什么,有什么帮助吗?该代码应该使用递归函数来获取数组中所有等于或大于 0 的整数的乘积。

标签: arrayscrecursionfunction-definition

解决方案


我猜递归终止的条件应该是:

if (n-1 < 0) {
        return 1;
}

它可以重新表述为:

if (n <= 0) {
        return 1;
}

什么意味着空数组条目的乘积是1。此外,更深入的表达应该是:

return arr[n-1] * prod(arr , n - 1);

最终代码可能是:

int prod(int arr[], int n) {
    if (n == 0)
        return 1;
    return arr[n-1] * prod(arr, n - 1);
}


推荐阅读