穷举法找钱递归函数r语言
时间: 2023-09-23 08:09:43 浏览: 190
可以通过以下递归函数实现穷举法找钱:
```R
findChange <- function(coins, n, amount) {
# 如果目标金额是0,则只有一种找钱方法:不找钱
if (amount == 0) {
return(1)
}
# 如果目标金额小于0,则没有找到合适的找钱方法
if (amount < 0) {
return(0)
}
# 如果没有硬币可用但目标金额不为0,则也说明没有找到合适的找钱方法
if (n <= 0 && amount > 0) {
return(0)
}
# 递归地考虑两种情况:使用当前硬币,或不使用当前硬币
return(findChange(coins, n - 1, amount) + findChange(coins, n, amount - coins[n]))
}
```
这个函数会基于输入的硬币面额列表和目标金额,递归地搜索所有可能的找钱方法,返回找钱方法总数。注意,这里假设硬币数量是无限的,因此同一种面额的硬币可以被反复使用。
相关问题
穷举法找钱不用for循环
穷举法找钱可以使用递归实现,不需要使用for循环。具体做法是将可选硬币的列表和需要找零的金额作为参数传入递归函数中,递归函数内部则不断缩小可选硬币的列表直至为空,或者找到了一组硬币的组合使得总面值等于需要找零的金额。如果找到了一组组合,则记录下来并返回。如果遍历完所有硬币列表都没有找到符合条件的组合,则返回无解。
简述穷举法、递归法、回溯法、贪婪法的基本思想?
以下是四种算法的基本思想:
1. 穷举法:将所有可能的情况都列举出来,然后逐一判断哪些情况符合要求。虽然穷举法可以得到最优解,但是当问题规模较大时,时间复杂度会非常高。
2. 递归法:将问题分解若干个子问题,然后递归地解决每个子问题。递归法通常需要一个递归函数和一个递归终止条件。
3. 回溯法:回溯法是一种通过探索所有可能的候选解来找出所有的解的算法。在回溯法中,每次扩展新的节点时,先判断该节点是否合法,如果合法再递归地搜索下去,如果不合法,就返回上一个节点。
4. 贪心法:贪心法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望最终得到全局最好或最优的算法。贪心法通常需要证明贪心策略的正确性。
阅读全文