小编Mer*_*ert的帖子

我的haskell代码中的堆栈溢出

我想找到换币的所有组合.1,2,5,10,20,50,100和200.(1分,2分..)如果硬币超过500(5欧元),它应该给-1.My代码与那些测试用例完美配合:numOfSplits 10 (11)numOfSplits 20(41)numOfSplits 100(4563).当我尝试使用numOfSplits 200或500的测试用例时,它会产生C堆栈溢出错误.我怎样才能使我的代码更好?

numOfSplits :: Integer -> Integer  
numOfSplits a  
    | (abs a) > 500 = -1  
    | (abs a) == 0 = 0  
    | otherwise = intzahler (makeChange [200,100,50,20,10,5,2,1] (abs a) 200)  

intzahler :: [[Integer]] -> Integer  
intzahler array  
    | array == [] = 0  
    | otherwise = 1 + intzahler (tail array)  

makeChange :: [Integer] -> Integer -> Integer -> [[Integer]]  
makeChange coins amount maxCoins  
    | amount < 0  = []  
    | amount == 0 …
Run Code Online (Sandbox Code Playgroud)

stack-overflow recursion haskell coin-change

2
推荐指数
1
解决办法
504
查看次数

我的递归函数中的堆栈溢出

代码在这里,当我调用numberOf 3或numberOf整数> 2我得到此错误ERROR - C堆栈溢出.我的代码应该将2 ^(n-2)(2 ^ n)-1之间的数字更改为n> 2到二进制,并检查是否有连续的0.如果有不计数,如果没有+1.

numberOf :: Integer -> Integer  
numberOf i = worker i

worker :: Integer -> Integer  
worker i  
    | (abs i) == 0 = 0   
    | (abs i) == 1 = 2  
    | (abs i) == 2 = 3   
    | otherwise = calculat (2^((abs i)-2)) ((2^(abs i))-2)

calculat :: Integer -> Integer -> Integer  
calculat ab bis  
    | ab == bis && (checker(toBin ab)) == True = 1  
    | ab < bis …
Run Code Online (Sandbox Code Playgroud)

stack-overflow recursion haskell

0
推荐指数
1
解决办法
124
查看次数

标签 统计

haskell ×2

recursion ×2

stack-overflow ×2

coin-change ×1