写出贪心算法和递归算法的代码
时间: 2024-10-30 20:05:45 浏览: 18
贪心算法、分治算法和动态规划的区别 贪心算法和动态规划.pdf
好的,这里提供一个简单的Python示例,分别展示了一个经典的找零钱问题的递归算法和贪心算法。假设我们有一个无限量的整数数组`coins`表示可用的硬币面额,以及一个整数`target`作为目标金额。
**贪心算法:**
```python
def greedy_change(coins, target):
if target == 0:
return []
min_coins = [0] + [float('inf')] * len(coins)
for i, coin in enumerate(coins):
for j in range(i+1, len(min_coins)):
min_coins[j] = min(min_coins[j], min_coins[i] + 1)
return min_coins[target]
# 使用示例:[1, 5, 10],目标金额23
coins = [1, 5, 10]
target = 23
print(greedy_change(coins, target))
```
这个算法尝试将尽可能少的硬币加在一起以达到目标金额,但并不保证是最优解。
**递归算法:**
```python
def recursive_change(coins, target, n=0, result=[]):
if target == 0:
return result
elif target < 0 or n >= len(coins):
return result
else:
# 试探是否添加当前面额
with_coins = recursive_change(coins, target - coins[n], n, result+[coins[n]])
without_coins = recursive_change(coins, target, n+1, result)
# 如果不添加更节省,返回不添加的结果
if len(with_coins) <= len(without_coins):
return with_coins
else:
return without_coins
# 使用示例同上
result = recursive_change(coins, target)
print(result)
```
递归算法会尝试所有的可能性,直到找到一个满足条件的解。
请注意,这两个代码片段都假设了有足够的硬币供选择。在实际应用中,你可能需要加入错误处理代码,如检查输入的有效性和是否有足够的硬币。
阅读全文