【发布时间】:2020-05-28 14:24:05
【问题描述】:
我需要使用 c++ 中的递归函数找到数组中最小数字的索引,该函数只能获取 2 个参数:指向数组的指针及其大小。
int smallest(int arr[], int num);
我设法做到了这一点,但是我得到了一个静态的辅助变量并在函数外部声明:
static int flag = 0;
int smallest(int* arr, int num) {
if (flag == num - 1)
return flag;
if (arr[num - 1] > arr[flag]) {
return smallest(arr, num - 1);
} else {
flag++;
return smallest(arr, num);
}
}
现在我的问题是我可以在没有静态变量或num 以外的任何其他变量的情况下执行此操作吗?这是我到目前为止得到的:
int smallest(int arr[], int num) {
if (arr != &arr[num - 1])
if (*arr < arr[num - 1])
smallest(arr, num - 1);
else
smallest(arr + 1, num);
return num - 1;
}
它不返回最小值的索引,但它确实到达了它的地址,当数组指针地址与最小值的地址相同时,函数结束。我怎样才能让它返回索引?
我是一名学生,我对 C++ 还很陌生,感谢您的帮助!谢谢!
===
编辑:
这最初来自家庭作业,但不使用外部帮助变量或函数的约束是我的!我很想知道它是否可能。
【问题讨论】:
-
函数只能获取2个参数那是谁的约束?
-
arr != &arr[num - 1]应该是arr != (arr + num - 1)。*arr < arr[num - 1]应该是*arr < *(arr + num - 1)或arr[0] < arr[num - 1]。最好不要混合和匹配*和[]符号。 -
如果能得到地址,索引为
address - arr。减去指针会给你两个指针之间元素数量的差异。如果两个地址不在同一个数组中,显然这是没有意义的。 -
有了您的约束,我能想到的唯一方法是返回
arr和对smallest的调用之间的差异,其中smallest返回arr内的指针。 -
你有一个数组 int[N]。你想找到最小元素的索引。您可以要求其他人找到数组 int[N-1] 的最小元素的索引。你会怎么做?
标签: c++ arrays function recursion