Python基本数学算法函数
我试图确切地理解这个函数是如何工作的,我一直在玩弄它,但我不确定 我所知道的:任何余数为1的奇数都将返回0 我感到困惑的是:当我计算它时,我得到了2,这将导致,但不是'36//2+1'等于'19'而不是'2' 代码:Python基本数学算法函数,python,math,Python,Math,我试图确切地理解这个函数是如何工作的,我一直在玩弄它,但我不确定 我所知道的:任何余数为1的奇数都将返回0 我感到困惑的是:当我计算它时,我得到了2,这将导致,但不是'36//2+1'等于'19'而不是'2' 代码: 不,这不是真的,因为anon36/2本身会调用anon,而不是只返回19。不,这不是真的,因为anon36/2本身会调用anon,而不是只返回19。函数告诉你,如果输入是偶数,你可以将一个数除以2的频率,因为它会递归地调用自己,将原始输入的一半除以2。通过在每次递归调用的返回值中添
不,这不是真的,因为anon36/2本身会调用anon,而不是只返回19。不,这不是真的,因为anon36/2本身会调用anon,而不是只返回19。函数告诉你,如果输入是偶数,你可以将一个数除以2的频率,因为它会递归地调用自己,将原始输入的一半除以2。通过在每次递归调用的返回值中添加1,它可以有效地计算谁经常调用自己,直到返回0。函数告诉您,如果输入是偶数,它将使用原始输入的一半递归调用自己,您可以将一个数除以二的频率。通过在每次递归调用的返回值中添加1,它可以有效地统计经常调用自己的用户,直到返回0为止。让我们看看anon36会发生什么: 36%2不是==到1,因此它返回1+anon18 18%2不是==到1,因此它返回1+anon9 9%2为==1,因此它返回0 将所有收益相加得到:1+1+0=2。
我建议研究递归如何使用堆栈图!请注意,您正在再次调用anon函数,这就是它继续运行的原因。让我们看看anon36会发生什么: 36%2不是==到1,因此它返回1+anon18 18%2不是==到1,因此它返回1+anon9 9%2为==1,因此它返回0 将所有收益相加得到:1+1+0=2。
我建议研究递归如何使用堆栈图!请注意,您正在再次调用anon函数,这就是它继续运行的原因。如果跟踪函数调用,您将得到以下结果:
anon(36) # First call, even number = 1
1 + anon(36//2 = 18) # Even number = 1
1 + 1 + anon(18//2 = 9) # Odd number = 0
1 + 1 + 0 = 2 # Returned value
因此,返回值为2。如果跟踪函数调用,则得到的结果如下:
anon(36) # First call, even number = 1
1 + anon(36//2 = 18) # Even number = 1
1 + 1 + anon(18//2 = 9) # Odd number = 0
1 + 1 + 0 = 2 # Returned value
因此,返回值为2。因为它计算的是1+anon18,而不仅仅是1+18。您似乎缺少的关键字是递归。anon36>1+anon18>1+1+anon9>1+1+0=2建议您也可以使用调试器,或者尝试使用pythontutor.com之类的工具逐步完成代码流,以防您想了解自己,我准备了一个永久链接:立即查看:因为它正在计算1+anon18,而不仅仅是1+18。您似乎缺少的关键字是递归的。anon36>1+anon18>1+1+anon9>1+1+0=2建议您也可以使用调试器,或者尝试使用pythontutor.com等工具逐步完成代码流,以防您想了解自己,我准备了一个永久链接:立即查看: