首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我不能基于给定的Sum来生成数组的子集

我不能基于给定的Sum来生成数组的子集
EN

Stack Overflow用户
提问于 2020-02-25 08:14:09
回答 1查看 47关注 0票数 0

我正在使用一个递归函数来根据给定的和从字符数组中查找子集:

代码语言:javascript
复制
str="1234567890"

n=2 (子集的大小),m=9 (给定的和)。解决方案:{9,0},{0,9},{8,1},{1,8},{7,2},{2,7},,,,,{5,4},{4,5}。我的代码如下。

代码语言:javascript
复制
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
void genrate(char*,int,int,int);
int main(){
    char str[20]="1234567890";
    genrate(str,2,9,10);
}
void genrate(char *str,int n,int m,int k){
    int i,j,sum;
    sum=0;
    if(sum==m){
        for(i=0; i<n; i++){
            printf("%c ",str[i]);
        }
        printf("\n");
    }
    sum+=(int)str[k]-48;
    genrate(str,n,m,k);
    genrate(str,n,m,k-1);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-25 09:22:22

这个答案并没有给出解决方案,但我只是想指出一些关于递归的错误。

首先,局部变量不是一个好主意,例如,变量sum将在下一个递归调用中重新定义,因为这个新调用将执行int i,j,sum;初始化,我打印了sum和check的地址:

代码语言:javascript
复制
Address of SUM : 5f7ac8
Address of SUM : 5f7a98
Address of SUM : 5f7a68
Address of SUM : 5f7a38
Address of SUM : 5f7a08

每次调用时都会发生变化。

genrate(str, n, m, k - 1)的第二个调用将永远不会被调用...因为它总是陷入无休止的调用循环{generate() ->)。

在递归函数中,你需要定义一个递归结束的条件,在你的例子中没有结束条件...

例如factoriel:

代码语言:javascript
复制
long int fact(int n) {
    if (n>=1)
        return n*fact(n-1);
    else
        return 1; // Here the end of the recursivity !
}

致以问候。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60385807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档