先看一个题目:
题面描述
小明很喜欢学数学,并且喜欢做一些奇怪的题,这天他想知道对于给定的 N ,有多少个 M 满足“ M<=N, gcd(N,M)==1, M 是偶数”。请你编写程序帮助小明解决这个问题。
输入数据
输入数据第一行为一个正整数 T ,表示测试数据的组数。 接下来的 T 组测试数据中, 每组测试数据为一行,包含一个整数 N (1≤T≤100, 1≤N≤10000 )。
输出数据
对于每一组输入数据,在单独的一行中输出 ”Case #id: M”, 表示第 id 组数据结果是 M , id 从 1 开始;
样例输入
4
1
2
11
23
样例输出
Case #1: 0
Case #2: 0
Case #3: 5
Case #4: 11
Hint:
gcd(a,b)==1 表示 a 与 b 的最大公约数为 1 ,即 a 与 b 互素。
  1. 讲讲算法思路
  2. 分析输入输出与显示
  3. 源代码与递归函数的精华所在
1.两个数互素:最小公约数为1。我们只要把大一点的数%较小的数,上一轮较小的数%这个余数又得到一个余数,每次判断这个余数是0还是1。只要有0出现就不互素。
2.输入用list[]保存。输出的序号可以在循环里面计数。输出赋值:print('Case #%d: %d'%(x,y))

3.

#求法,可能会用到函数,递归函数等
def gcd(x,y):#定义递归函数if x>=y:z1=x%y#取余数if z1==0:#如果余数==0,立马返回0这个指示表示x,y这两个数不是互素。return 0elif z1==1:#如果余数==1,立马返回1这个指示表示x,y这两个数是互素。return 1else:#如果上述的情况都不满足,立马递归,用结果作为输入,再次计算,直到返回值是0/1return gcd(y,z1)else:(x,y)=(y,x)z1=x%yif z1==0:return 0elif z1==1:return 1else:return gcd(y,z1)
test_nums=int(input())
stores=[]
for ii in range(test_nums):stores.append(int(input()))
m=0#计数
for i in stores:n=0m=m+1for M in range(2,i+1,2):if_is=gcd(i,M)if if_is==1:n=n+1print('Case #%d:'%(m),n)

这里的递归函数其实写的还是比较保守的,

def get_gcd(a,b):  if(a % b) == 0:  return b    else:    return get_gcd(b, a % b) 

这是某位同学的改进,直接判断递归函数的结果是不是1,是1的话就是互素。这里因为递归,所以就算较小数%较大数也不会有关系,无非就是在递归一次。

>>> 10%3
1
>>> 3%10
3
>>> 10%3
1

递归函数的特点:定义的函数里一定要在return后面再次调用原函数,并且有if函数的return某一个计算的变量作为最后的结果。不然就没完没了了。

Python递归函数的正确理解与使用相关推荐

  1. python函数可以作为容器对象吗_正确理解Python函数是第一类对象

    正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数 ...

  2. 正确理解Python函数是第一类对象

    正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数 ...

  3. python的上下文管理用哪个关键字_正确理解python中的关键字“with”与上下文管理器...

    正确理解python中的关键字"with"与上下文管理器 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  正确理解python中的关键字&quo ...

  4. python 有关 if __name__ == ‘__main__‘ 的正确理解

    写此文章的初衷在于笔者碰到一道题目如下: "假设有Python程序文件a.py,其代码如下: def main():if __name__ == '__main__':print(1)els ...

  5. python递归函数例题_递归案例python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 而对应的中文翻译 "递归" 却表达了两个意思:"递 ...

  6. python递归函数错误使用方式

    1.python递归函数入坑: ip_list = [] def chooseDebugLinux():import randominfo = {}dockerip = random.randint( ...

  7. python四舍五入round_四舍五入就用round( )?Python四舍五入的正确打开方式!

    四舍五入就用round( )?Python四舍五入的正确打开方式! 2018-09-22 21:40 阅读数 4 <>round( )函数简介 菜鸟教程中介绍到,round() 函数作用就 ...

  8. python中递归函数写法_《Python入门08》你知道Python递归函数怎么写吗~~

    点击上方的"小小白AI",选择"关注" 重磅知识,第一时间送达 前言 直入主题~~~ 1.什么是递归函数 前面深入介绍了如何创建和调用函数.你知道,函数可调用其 ...

  9. 如何系统的自学python-自学Python应该如何正确系统学习,避免少走弯路

    原标题:自学Python应该如何正确系统学习,避免少走弯路 人生苦短,我用 Python. 学习 Python 的初学者往往会面临以下残酷的现状: 网上充斥着大量的学习资源.书籍.视频教程和博客,但是 ...

最新文章

  1. webpack+vue实践
  2. (0014)iOS 开发之Mac自带的Apache本地服务器玩耍(01)
  3. c++list支持索引吗_还在为不懂Python切片操作及原理而苦恼吗?漫画帮你立马理解掌握...
  4. 用Java实现天天酷跑(附源码),只能用牛逼来形容了!
  5. python语言格式化输出_Python字符串格式化输出
  6. Spring抽取jdbc配置文件
  7. hiredis使用,封装代码示例
  8. SAP ERP和C4C Acount和Contact的双向同步
  9. 插入1000万条数据到mysql数据库表
  10. iOS - OC RunLoop 运行循环/消息循环
  11. Elasticsearch mysql 增量同步
  12. mysql数据库练习题_50道SQL练习题及答案(MySQL版)
  13. Pytorch模型量化
  14. uva 11137 Ingenuous Cubrency
  15. 10000小时和10000次提交
  16. 计算机基础学习记录4-2
  17. CO Business Transaction-CO业务处理
  18. 洛谷1309 瑞士轮
  19. 2022-2028全球细胞和基因治疗制造服务行业调研及趋势分析报告
  20. 耗时一年,乘风破浪:一群牛逼的人,做成了一件牛逼的事儿!

热门文章

  1. C语言socket发送json,C++实现Socket传输json封装的Mat
  2. java 改为matlab_用面向对象的方法将一段JAVA代码转化为matlab
  3. 事务超时时间无效_Java面试题:Spring事务面试考点的集合整理。建议收藏阅读...
  4. 移动互联网的发展趋势ios与android哪更有前景,移动互联网是什么?移动互联网现状,发展趋势及前景...
  5. git合并分支的时候将某个文件添加到忽略列表_常用的 Git 命令
  6. mysql数据还原时报错_还原mysql数据库时报错
  7. Android动画定义知识小结
  8. Volley源码学习1--volley结构图
  9. java 抽象类和接口2--什么时候用接口什么时候用抽象类
  10. Cisco Packet Tracer7.1 rip协议实验