错过了逻辑使用recurssion寻找总和,得到了段错误 [英] missed logic in finding sum using recurssion ,got segfault

查看:143
本文介绍了错过了逻辑使用recurssion寻找总和,得到了段错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图实现使用recurssion以下,但即时得到段错误请指正??

我试图用一套置换解决问题{1,} 3,5,7但未能输出所需的结果
    打印奇数份数,即对于n = 8的所有组合物:
    7 + 1

    5 + 3

    5 + 1 + 1 + 1

    3 + 3 + 1 + 1

    3 + 1 + 1 + 1 + 1 + 1

    1 + 1 + 1 + 1 + 1 + 1 + 1 + 1

sumto8(一,启动,SUM1)是://选择关注的元素
sumto8(一,启动,和)://选择关注的元素

 #包括LT&;&iostream的GT;
#包括LT&;&stdio.h中GT;INT sumto8为(int *,INT,INT);
INT N = 4;
INT C = 8;诠释的main()
{
    诠释一个[] = {1,3,5,7};
    sumto8(一,0,C);
}INT sumto8为(int *一,诠释开始,诠释和)
{
   如果((总和℃,)||(开始>(N-1)))
   返回-1;   如果(总和== 0)
   {
       COUT<<<< A [开始]。
       返回的printf(%d个,一个[开始]);
   }
   如果(ⅰ== - 1)
      {
       返回-1;
      }
      如果(J == - 1)
      {
        返回-1
      }
   其他
   {
      INT SUM1 = SUM-A [开始]。
      INT I = sumto8(一,启动,SUM1);      INT J = sumto8(一,启动+ 1,总和);
   }   返回的printf(%d个,一个[开始]);
}

看来,如果条件求和℃下不检查正常...

 输出:段错误


解决方案

你说


  

看来,如果条件求和℃下不检查正常...


我发现你的支票像这样

  IF((总和℃下)及及(开始>(N-1)))
   返回-1;

如何如果和更改为或

  IF((总和℃下)||(开始>(N-1)))
   返回-1;

I tried to achieve following using recurssion but im getting segfault pls correct me??

i tried solving problem using permutation of set {1,,3,5,7} but failed to output the required result print all compositions of a number in odd parts, i.e. for n = 8: 7 + 1
5 + 3
5 + 1 + 1 + 1
3 + 3 + 1 + 1
3 + 1 + 1 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1

sumto8(a,start,sum1) is://choosing element of concern sumto8(a,start,sum)is ://choosing element of concern

#include<iostream>
#include<stdio.h>

int sumto8(int*,int,int);
int n=4;
int c=8;

int main()
{
    int a[]={1,3,5,7};
    sumto8(a,0,c);
}

int sumto8(int* a,int start,int sum)
{
   if((sum<0) || (start>(n-1)))
   return -1;

   if(sum==0)
   {
       cout<<" "<<a[start];
       return printf("+ %d",a[start]);
   }
   if(i==-1)
      {
       return-1;
      }
      if(j==-1)
      { 
        return -1
      }




   else
   {
      int sum1=sum-a[start];


      int i=sumto8(a,start,sum1);



      int j=sumto8(a,start+1,sum);
   }

   return printf("+ %d",a[start]);
}

it seems the if condition for sum<0 is not checking properly...

output :segfault

解决方案

you say

it seems the if condition for sum<0 is not checking properly...

i found out that your checking like this

   if((sum<0) && (start>(n-1)))
   return -1;

how if the "and" you change it to "or"

   if((sum<0) || (start>(n-1)))
   return -1;

这篇关于错过了逻辑使用recurssion寻找总和,得到了段错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆