【问题标题】:Find elements from an array whose sum equals a given number从数组中查找总和等于给定数字的元素
【发布时间】:2014-05-26 14:07:36
【问题描述】:

我正在尝试编写 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);
    }
}

【问题讨论】:

标签: c recursion functional-programming sum


【解决方案1】:

你的代码不会停止,因为每次你通过循环分配i=0

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

findsum 函数中。

所以按照我的建议你可以做一些改变

main 中的第一个

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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2020-06-04
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多