Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何解决递归回溯问题_Ruby_Recursion_Recursive Backtracking - Fatal编程技术网

Ruby 如何解决递归回溯问题

Ruby 如何解决递归回溯问题,ruby,recursion,recursive-backtracking,Ruby,Recursion,Recursive Backtracking,我在学校遇到了一个递归回溯问题,我不知道该如何着手解决它 给定一个整数数组,确定是否可以选择一组添加到特定和的整数。使用名为sum\u to\u total的递归方法来解决问题(无循环!) 示例: “Array[3,6,7]”和“Sum 10”返回true,因为3+7=10 “Array[1,2,3]”和“Sum 6”返回true,因为1+2+3=6 “Array[2,4,6]”和“sum 5”返回false,因为这些数字的组合总和都不是5 到目前为止,我得到的是: def self.sum

我在学校遇到了一个递归回溯问题,我不知道该如何着手解决它

给定一个整数数组,确定是否可以选择一组添加到特定和的整数。使用名为
sum\u to\u total
的递归方法来解决问题(无循环!)

示例:

  • “Array
    [3,6,7]
    ”和“Sum 10”返回true,因为
    3+7=10
  • “Array
    [1,2,3]
    ”和“Sum 6”返回true,因为
    1+2+3=6
  • “Array
    [2,4,6]
    ”和“sum 5”返回false,因为这些数字的组合总和都不是5
到目前为止,我得到的是:

def self.sum_to_total(sum, array, index)

  @@sum_num += array[index]
  return false if @@sum_num > sum || @@sum_num < sum
  return false if index<board.length || index<0
  return true if @@sum_num == sum

  return solvable(sum, array, index+1) 
end


@@sum_num = 0
puts sum_to_total(10, [3, 5, 7], 0)
def self.sum_to_total(总和、数组、索引)
@@sum_num+=数组[索引]
如果@sum_num>sum||@@sum_num如果index您已经尝试过了,则返回false,因此这里有一些指针可以帮助您前进

  • “递归”指的是一个调用自身的方法。您的
    solvable
    需要调用
    sum\u to\u total
  • 如果您必须在下次调用时访问更新的值,则递归方法需要传入在该方法期间更改的任何值。因此,
    index
    是正确的,但是您还必须传入
    sum\u num
  • 您可以使用默认值在第一次调用时初始化
    索引
    总和
    。您不需要处理全局变量。(也不应该如此。大多数时候,全局变量是邪恶的。)
  • 您只希望在浏览完整个阵列后返回。在递归方法调用中不使用
    return
    ,只调用该方法
  • 您不需要使用
    self.method\u name
    将其作为类方法
  • 我将向您展示基本的递归方法,并让您解决(更困难的)回溯需求。(此基本方法将解决整个数组是否相加的问题。回溯部分用于确定数组的子集是否相加。)

    这三行代码可以执行此操作:

  • 将当前数组值添加到总和。(这一次你差不多吃过了,好的。)
  • 如果完成了对数组的遍历,则返回数组的和是否等于提供的和值
  • (如果还没有完成数组的遍历)再次调用该方法,传入递增的索引值和到目前为止的累计和值。(你在正确的轨道上!)

  • 这篇文章应该可以帮助您完成回溯部分。

    您已经尝试了这一点,下面是一些可以帮助您前进的建议

  • “递归”指的是一个调用自身的方法。您的
    solvable
    需要调用
    sum\u to\u total
  • 如果您必须在下次调用时访问更新的值,则递归方法需要传入在该方法期间更改的任何值。因此,
    index
    是正确的,但是您还必须传入
    sum\u num
  • 您可以使用默认值在第一次调用时初始化
    索引
    总和
    。您不需要处理全局变量。(也不应该如此。大多数时候,全局变量是邪恶的。)
  • 您只希望在浏览完整个阵列后返回。在递归方法调用中不使用
    return
    ,只调用该方法
  • 您不需要使用
    self.method\u name
    将其作为类方法
  • 我将向您展示基本的递归方法,并让您解决(更困难的)回溯需求。(此基本方法将解决整个数组是否相加的问题。回溯部分用于确定数组的子集是否相加。)

    这三行代码可以执行此操作:

  • 将当前数组值添加到总和。(这一次你差不多吃过了,好的。)
  • 如果完成了对数组的遍历,则返回数组的和是否等于提供的和值
  • (如果还没有完成数组的遍历)再次调用该方法,传入递增的索引值和到目前为止的累计和值。(你在正确的轨道上!)

  • 这篇文章应该可以帮助您完成回溯部分。

    当系统因为标题不好而阻止您提交问题时,请不要在文章末尾添加“(Ruby)”以通过筛选。这就是标签的用途。书中有一节是关于写标题的;我建议你先读一遍,然后再回来,让你的问题标题更具描述性。欢迎来到SO!请将“”和“”与“”一起阅读。你要求我们努力帮助你;我们要求你努力提出一个问得好的问题。语法和正确的格式对SO很重要。请阅读“”。您的代码不符合准则,因为未定义
    solvable
    。当系统因标题不好而阻止您提交问题时,请不要在问题末尾添加“(Ruby)”以通过筛选。这就是标签的用途。书中有一节是关于写标题的;我建议你先读一遍,然后再回来,让你的问题标题更具描述性。欢迎来到SO!请将“”和“”与“”一起阅读。你要求我们努力帮助你;我们要求你努力提出一个问得好的问题。语法和正确的格式对SO很重要。请阅读“”。您的代码不符合准则,因为未定义
    solvable
    def sum_to_total(sum, array, index = 0, sum_num = 0)
      sum_num += array[index]
      return sum_num == sum if index == array.size - 1
      sum_to_total(sum, array, index + 1, sum_num)
    end