arrays - 我使用数组编写递归函数时犯了什么错误?
问题描述
#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 的整数的乘积。
解决方案
我猜递归终止的条件应该是:
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);
}
推荐阅读
- python - Django webapp 无法在 ipad(csrf_token) 和 IE(CORS) 上运行错误
- parsing - 解析任何语言的非 json/xml txt 文件
- node.js - Mocha 变量已初始化,但使用时为空
- c++ - 为什么 B 类中的 f2 被 D 类中的 f2 覆盖
- spring-cloud-contract - 定义合同 DSL 以将 JSON 元素的数量从请求发送到响应
- c# - 如何在 ItemsControl 中实现 DependencyProperty
- javascript - 将自定义数据传递给 Fancybox 实例
- r - 在r中按不同顺序按多列对关联规则进行排序
- python - 使用翻译成python的InterX函数的模块错误
- sql - sqlite 查询适用于加法而不是除法