查找数组中的元素,其总和等于给定的数字

时间:2014-04-12 10:32:04

标签: c recursion functional-programming sum

我尝试编写一个A递归实现,但它不起作用。你能帮我找错吗?我只需要一个关于C的递归解决方案。

 void findsum(int arr[],int i, int k){
    if (k <= 0 || arr[i] > k) return;
    if (arr[i] <= k) {
        k -= arr[i];
        if (k == 0) {
            NSLog(@"Summ %d, %d",arr[i], arr[i]); return;
        }
    }
    if (i == (25)) return;

    for (int a=i ;a<25; a ++ ) {
        findsum(arr, a, k);
    }
}
int main()
{
  int set[] = {18897109, 12828837, 9461105, 6371773, 5965343, 5946800, 5582170, 5564635, 5268860, 4552402, 4335391, 4296250, 4224851, 4192887, 3439809, 3279833, 3095313, 2812896, 2783243, 2710489, 2543482, 2356285, 2226009, 2149127, 2142508, 2134411};
   int sum = 100000000;
 int n = sizeof(set)/sizeof(set[0]);
    for (int i = 0; i < n; i++) {
        findsum(set, i, sum);
    }
}

1 个答案:

答案 0 :(得分:0)

您的代码不会停止,因为每次按循环分配i=0

for (i = 0 ;i<26; i ++ ) {
        findsum(arr, i, k);
    }

findsum函数中。

根据我的建议,您可以进行一些更改,如

首先在主

int main()
{
    int set[] = {18897109, 12828837, 9461105, 6371773, 5965343, 5946800, 5582170, 5564635, 5268860, 4552402, 4335391, 4296250, 4224851, 4192887, 3439809, 3279833, 3095313, 2812896, 2783243, 2710489, 2543482, 2356285, 2226009, 2149127, 2142508, 2134411};
    int sum = 100000000,i;
    int n = sizeof(set)/sizeof(set[0]);
    findsum(set, n, sum);
}

findsum中排名第二

void findsum(int arr[],int i, int k)
{

    if (k <= 0 || arr[i] > k) return;

    if (arr[i] <= k) 
    {
        k -= arr[i];
        if (k == 0) {
            NSLog(@"Summ %d, %d",arr[i], arr[i]); return;
        }
    }

    if (i == 25) return;

    findsum(arr, i, k);
}