想请教一下各位网页 这串代码是怎么一步步运行的!
def minbag(n):
if n > 1:
if n == 2 or n == 3 or n == 5:
return 1
else:
smallest = minbag(n-2)
if n > 4:
smallest = min(smallest, minbag(n-3))
if n > 6:
smallest = min(smallest, minbag(n-5))
return 1 + smallest
else:
return 0
首先判断n的大小,如果它大于1,则继续执行,否则返回0
如果n等于2、3或5,则直接返回1(因为此时组成n的最小数字集合只有1个数字)
否则,找到组成数字n的最小数字集合所需的最小数字数目
首先,找到组成n-2的最小数字集合所需的最小数字数目,存入变量smallest
如果n大于4,则再找到组成n-3的最小数字集合所需的最小数字数目,并且与smallest取较小值
如果n大于6,则再找到组成n-5的最小数字集合所需的最小数字数目,并且与smallest取较小值
最后在所需数字数量的基础上加上1,因为我们加入了一个数字,即数字2、3或5
举个例子,当输入参数n=11时: 首先,在满足n > 1的条件下执行代码。接下来,执行如下步骤:
n不等于2、3或5,继续执行
执行minbag(n-2),即minbag(9),此时smallest为3,因为最小组合为2 + 2 + 5
n大于4,继续执行
执行minbag(n-3),即minbag(8),此时smallest为2,因为最小组合为2 + 3 + 3的形式,比3 + 2 + 2更优
n大于6,继续执行
执行minbag(n-5),即minbag(6),此时smallest为2,因为最小组合为2 + 2 + 2,比5 + 2更优
返回最小数字数目1+2=3,即组成数字11的最小数字集合为2 + 3 + 3.
最终,minbag函数返回的是一个整数,表示组成数字n的最小数字集合所需的最小数字数目。
你好 你上面说的内容我都懂但‘n不等于2、3或5,继续执行
执行minbag(n-2),即minbag(9),此时smallest为3,因为最小组合为2 + 2 + 5
n大于4,继续执行
执行minbag(n-3),即minbag(8),此时smallest为2,因为最小组合为2 + 3 + 3的形式,比3 + 2 + 2更优
n大于6,继续执行
执行minbag(n-5),即minbag(6),此时smallest为2,因为最小组合为2 + 2 + 2,比5 + 2更优
返回最小数字数目1+2=3,即组成数字11的最小数字集合为2 + 3 + 3.
最终,minbag函数返回的是一个整数,表示组成数字n的最小数字集合所需的最小数字数目。
’ 第一,这段话中我想知道每一步当中的smallest是怎么算出来的呢?第二,我想知道为程序具体例如“执行minbag(n-2),即minbag(9),此时smallest为3,因为最小组合为2 + 2 + 5 n大于4,继续执行” n为什么大于4呢?或者说它为什么接着走下去了呢?? 麻烦解答一下 我打赏奖金!
加一个循环,让他可以循环使用
最后代码如下
from fractions import Fraction
while True:
b = int(input('输入第一个分数的分母'))
a = int(input('输入第一个分数的分子'))
d = int(input('输入第二个分数的分母'))
c = int(input('输入第二个分数的分子'))
e = Fraction(a, b)
f = Fraction(c, d)
g = input('选择运算方法(加,减,乘,除)')
if g == '加':
print(e + f)
continue
if g == '减':
print(e - f)
continue
if g == '乘':
print(e * f)
continue
if g == '除':
print(e / f)
continue
我可以回答部分问题:
如何递归调用Python中的极小化函数min()?
Python中的min()函数本身并不需要递归调用,因为它只需要传入一个可迭代对象,比如列表、元组等,就可以返回其中的最小值。
但是,如果需要实现一个递归函数来获取列表中的最小值,可以采用以下实现方法:
def recursive_min(lst):
"""
使用递归实现获取列表中的最小值
"""
if len(lst) == 1:
return lst[0]
else:
return min(lst[0], recursive_min(lst[1:]))
该函数使用了递归的思想,将列表分为第一个元素和剩余部分,然后比较第一个元素和剩余部分的最小值,直到列表中只剩下一个元素,此时返回该元素。
请帮我分析一下以下代码的执行过程:
该代码是一个名为MinStack的类,实现了一个带有min函数的栈。该栈在每次push新元素时,将当前栈中的最小值和新元素比较,将较小值添加到一个辅助栈中。这样,在调用min函数时,直接返回辅助栈中的栈顶元素,即为当前栈中的最小值。
具体的执行过程如下:
需要注意的是,该类中的push、pop、top和min函数的时间复杂度均为O(1),符合题目要求。
minbag(n)函数是一个递归函数,在袋子只能装2、3或5件物品的情况下,计算出装n件物品的最小袋子数。
首先检查n是否大于1,如果是,该函数检查n是否等于2、3或5。如果n等于这些值中的任何一个,那么只需要一个袋子,所以函数返回1。
接下来就是递归调用,minbag(n-2) 就相当于是用一个袋子装 2 件物品,然后看剩下的 n-2 个物品最少要用多少袋子,n-3 和 n-5 也是一样的道理,先用一个袋子装 3 或 5 件物品,然后看剩下的 n-3 或 n-3 件物品最少要用多少袋子。
举个例子,n=7
首先是 smallest = minbag(7-2),也就是说,7 个物品里,用 1 个袋子装 2 件物品,然后看剩下的 5 件物品最少要用多少袋子,然后继续递归;
然后再是 smallest = min(smallest, minbag(7-3)),7 个物品里,用 1 个袋子装 3 件物品,然后看剩下的 4 件物品最少要用多少袋子,然后继续递归;
minbag(7-5) 同理。