我们可以将这个嵌套循环修改为递归函数吗? 目标:在一个int数组中找到两个indice,其总和等于给定的目标值。这是工作迭代代码,我如何以不同的方式将此函数视为递归?
#include<stdio.h>
#define SIZE 15
int find_indice(const int arr[],int size,int target,int *ind_1,int *ind_2);
int main(){
int arr[SIZE]={0,1,3,4,5,6,7,8,9,15,-5,0,9,10,23};
int target=-2;
int ind1,ind2;
find_indice(arr,SIZE,target,&ind1,&ind2);
if(ind1!=-1 && ind2!=-1){
printf("array[%d]=>%d,array[%d]=>%d \n",ind2,arr[ind2],ind1,arr[ind1]);
}
else{
printf("Not found! \n");
printf("array[%d]=>%d,array[%d]=>%d \n",ind2,0,ind1,0);
}
return 0;
}
int find_indice(const int arr[],int size,int target,int *ind_1,int *ind_2){
int i,j,found=0;
for(i=0;i<size-1;i++){
for(j=0;j<size;j++){
if((arr[i]+arr[j])==target){
*ind_1=i;
*ind_2=j;
found=1;
}
}
}
if(found==0){
*ind_1=-1;
*ind_2=-1;
}
return 0;
}
答案 0 :(得分:0)
我不知道如何将循环转换为相同函数的递归调用,但这里有一些关于代码的注释:
如果找不到索引,printf
语句就毫无意义。
为什么你在外循环中停留在i<size-1
?测试应为i < size
,除非您希望索引不同,但您的代码不实现此约束。
find_indice()
应返回找到的状态,它比在*ind_1
和*ind_2
中存储虚假索引要简单得多,并允许您对数组索引使用正确的类型:{ {1}}。
你应该在找到匹配时立即从size_t
返回,不需要尝试所有可能性。
您可以通过find_indice()
而不是j=i
启动内循环来缩短运行时间。请注意,对于其他目标,例如j=0
,-10
可以在find_indice()
和*ind_1
中返回相同的索引。这可能不是预期的。如果不需要,你可以在*ind_2
开始内循环。