关于暴力搜索算法

给定数组arr,arr中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个正数aim 代表要找的钱数,求换钱有多少种方法。

以下是我的python3 版本的答案:

money_array = [1,2,4]

aim =3

def force_search(array,index,aim):

if index ==len(array):

if aim ==0:

return 1  

#表示的是前面的系数组成是否可以构成一个==aim的解  ax+by+cz = aim  (a,b,c)  系数成立返回1

        else:

return 0

    else:

result =0

        i =0

        while array[index]*i <= aim:

money_left = aim - array[index]*i

result += force_search(array=array,index=index+1,aim=money_left)

i+=1

    return result

result = force_search(array=money_array,index=0,aim=aim)

print(result)

我最初的思路也是递归查找,但是不明白界限为什么是 len(array),理论上超过len(array) -1 就越界了。

冥思苦想明白了。len(array) 是给多层 i 赋值 之后 (也就是注释种说的 (a,b,c) 组),进行判断 递归中的i 组合能否实现等式 (i a+i b+i c)= aim i 是层层递进的。这里用数学等式也许会更好理解。第一次写,写的不好还请多多包涵

你可能感兴趣的:(关于暴力搜索算法)