首页 > 解决方案 > 为什么这个 ruby​​ 方法没有在返回时终止?

问题描述

新手红宝石问题

代码挑战:字符串折叠:删除给定字符串中的所有相邻重复项。注意:删除相邻重复项会创建新的相邻重复项,您也必须删除这些重复项。

我很确定我用简单的递归解决了这个问题,但是当我在调试器中一步一步地完成这一步时,代码在到达返回行时并没有终止,而是开始向字符串添加然后删除字母,直到最终终止。

例如

         zzzxaaxy => zxaaxy => zxxy => zy => zxxy => zy => zxxy => 
                                       ^ code hits return line here and should stop but instead continues 
def same_char_collapse(str)
    ar = str.split('')
    ar.map.each_with_index do |char1, idx|
        char2 = ar[idx+1]
        if char1 == char2
            ar.delete_at(idx)
            ar.delete_at(idx)
            same_char_collapse(ar.join(''))
        end
    end
    return ar.join('')
end

标签: rubyrecursion

解决方案


感谢您的帮助,经过大量的反复试验,我最终找到了解决方案

def dupes?(word) 
    word.each_char.with_index do |char, idx|
        if char == word[idx+1]
            return true
        end
    end
    return false
end

def removeDupe(word)
    ar = word.split('')
    ar.map.with_index do |char,idx|
        if char == ar[idx+1]
            ar.delete_at(idx)
            ar.delete_at(idx)
        end
    end
    return ar.join('')
end

def same_char_collapse(str)
    if dupes?(str)
        same_char_collapse(removeDupe(str))
    else
        return str
    end
end

推荐阅读