我对这段代码有几个问题(我不知道它是做什么的,它来自考试)。当数组像这样传递时,这意味着什么:nums[]?什么nums + 1意思?如果nums是一个数组,那么给它加1是什么意思?
int f(int nums[], int n){
if(n > 1) {
if(nums[0] < nums[1]) {
return 1 + f(nums + 1, n - 1);
}
else {
return f(nums + 1, n - 1);
}
}
else return 0;
}
Run Code Online (Sandbox Code Playgroud)
在 C 中,数组不能按值传递给函数。
如果你写这样的东西
int a[4] = {1, 2, 3, 4};
// ....
int result = f(a, 4);
// ^ The array "decays" to a pointer
Run Code Online (Sandbox Code Playgroud)
函数接收的参数(按值传递)是指向数组第一个元素的指针a和数组的大小(希望是正确的)。
在这样一个函数的声明中,一些人使用(并推荐)问题中显示的符号作为我们想要传递数组的事实的“文档”,但它可能会产生误导,如果编码器忘记了所述参数是只是一个指针。
鉴于使用(纯粹是学术性的,将该算法实现为递归函数是没有意义的),我会发现更具描述性的*:
int f(const int *nums, size_t n) {
// ^^^^^ ^
}
Run Code Online (Sandbox Code Playgroud)
什么
nums + 1意思?
的结果num + 1是一个指针,该指针指向紧跟在所指向的元素之后的元素num。
递归调用只是遍历数组,一次一个元素(注意“大小”相应减少),计算两个后续元素按递增顺序排列的次数。您是否能够在没有递归调用的情况下使用循环重写该函数?
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |