我们可以将这个嵌套循环,finding_indice转换为递归吗?

时间:2015-04-19 07:27:52

标签: c arrays search recursion iteration

我们可以将这个嵌套循环修改为递归函数吗? 目标:在一个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;
}

1 个答案:

答案 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开始内循环。