作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们可以将这个嵌套循环修改为递归函数吗?
目标:在一个int数组中找到两个总和等于给定目标值的索引。这是工作迭代代码,如何以不同的方式将此函数视为递归函数?
#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;
}
最佳答案
我不知道如何将循环转换为同一函数的递归调用,但这里有一些关于您的代码的注释:
printf
如果您找不到索引,则语句毫无意义。
为什么你停在 i<size-1
在外循环中?测试应该是i < size
,除非您希望索引不同,但您的代码没有实现此约束。
find_indice()
应该返回找到的状态,这比在 *ind_1
中存储虚假索引要简单得多和*ind_2
,并且允许您使用正确的数组索引类型:size_t
.
您应该从 find_indice()
返回当您找到匹配项时立即进行,无需尝试所有可能性。
您可以通过在 j=i
处启动内循环来将运行时间减半。而不是j=0
。请注意,对于不同的目标,例如 -10
, find_indice()
可以在 *ind_1
中返回相同的索引和*ind_2
。这可能不是我们所期望的。您可以在 j=i+1
处开始内循环。如果不需要的话。
关于我们可以将这个嵌套循环finding_indice 转换为递归吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29727040/
我是一名优秀的程序员,十分优秀!