数学函数

F(n) = 1 n = 1
F(n) = 1 n = 2
F(n) = F(n-1)+F(n-2) n > 2

问n=20时,F(n)的值是多少???

迭代实现

def F(n):x = 1y = 1if n < 1:print('输入错误')while n > 2:z = x + yx = yy = zn = n - 1#循环数减一return z

递归实现

def F(n):if n < 1:print('输入错误')elif n == 1 or n == 2:return 1else:return F(n-1) + F(n-2)

分析

分治思想:将复杂问题分解为多个简单问题
递归逻辑很简单,直接把所想的东西写成代码就是递归算法
用迭代代码来实现基本是毫秒级别的,而用递归来实现就考验你的CPU能力了
递归要正确使用

汉诺塔递归实现

def hanoi(n, x, y, z):#n为盘子个数,x为原来的柱子,z为最后移动到的位置if n == 1:print(x, '-->', z)else:hanoi(n-1,x,z,y)#将前n-1个盘子从x移动到y上print(x,'-->',z)#将最底下的最后一个盘子从x移动到z上hanoi(n-1,y,x,z)#将y上的n-1个盘子移动到z上n = int(input("请输入汉诺塔的层数:"))
hanoi(n,'X','Y','Z')

Task

0. 使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式)。
小甲鱼代码

def Dec2Bin(dec):result = ''if dec:result = Dec2Bin(dec//2)return result + str(dec%2)else:return resultprint(Dec2Bin(62))

我的代码

def mybin(n):c = ''if n == 0:return cwhile n >= 1:b = n // 2a = n % 2#二进制的最后一位c = str(mybin(b))#用整除数再求二进制return c + str(a)n = b


1. 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==> [1, 2, 3, 4, 5]
小甲鱼代码

result = []
def get_digits(n):if n > 0:result.insert(0, n%10)get_digits(n//10)

我的代码

result = []#放外面合适,不然每次执行都会归为空列表
def get_digits(n):if n > 0:#用while执行不出结果,因为n除以10永远都大于0a = n // 10b = n % 10#个位数result.append(b)get_digits(a)return list(reversed(result))

***2. 还记得求回文字符串那道题吗?现在让你使用递归的方式来求解,亲还能骄傲的说我可以吗?***。。。。。。。。。。

小甲鱼代码

def is_palindrome(n, start, end):if start > end:return 1     else:return is_palindrome(n, start+1, end-1) if n[start] == n[end] else 0string = input('请输入一串字符串:')
length = len(string)-1if is_palindrome(string, 0, length):print('"%s"是回文字符串!' % string)
else:print('"%s"不是回文字符串!' % string)

3. 使用递归编程求解以下问题:
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

我的代码:

def age(n):if n == 1:return 10if n > 1:return 2 + age(n - 1)


小甲鱼代码:

def age(n):if n == 1:return 10else:return age(n-1) + 2print('哈哈,我知道了,第五个人的年龄是 %d 岁,啵啵脆!' % age(5))

零基础入门学习Python22-递归2 斐波那契数列和汉诺塔相关推荐

  1. 简洁笔记-Java数据结构基础(5.递归和斐波那契数列、汉诺塔)

    什么是递归 递归简单来说就是方法调用自己 例子1: 从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山.. 例子2:美女拿着自己的照片, ...

  2. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)

    本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...

  3. Python 算法之递归与尾递归,斐波那契数列以及汉诺塔的实现

    文章目录 递归概念 递归要素 递归与迭代的区别 示例一:阶乘 示例二:斐波那契数列 示例三:汉诺塔问题 尾递归 Python 中尾递归的解决方案 递归概念 递归:程序调用自身的编程技巧称为递归( re ...

  4. Python之递归(含斐波那契数列和汉诺塔)

    Python递归 一.什么是递归? 递归就是在调用一个函数的过程中,直接或者间接的调用函数自身这就叫递归. 二.实例 这里讲一下递归的注意点: (1)调用一次函数就会在内存里开辟栈帧空间,在调用结束后 ...

  5. python 利用递归算法来完成计算乘阶、斐波那契数列、汉诺塔

    一.求一个整数的阶乘: 1.常用的迭代方法写法: def jc(n):result = nfor i in range(1, n):result *= ireturn resultnu = int(i ...

  6. python递归算法(斐波那契数列,汉诺塔、二分法查找)

    # 递归算法的三大特点 # 1.递归过程一般通过函数或子过程来实现 # 2.递归算法在函数或子过程的内部,直接或间接调用自己的算法 # 3.递归算法实际上是把问题转换为规模缩小的同类问题的子问题,然后 ...

  7. 经典递归——斐波那契数列,汉诺塔

    斐波那契 汉诺塔 0 1 1 2 3 5 8 13 21 int fibonacci(int a){if(a==0)return 0;else if(a==1)return 1;elsereturn ...

  8. c语言斐波那契数列递归数组,C语言数据结构学习:递归之斐波那契数列

    自己对递归还是不太熟练,于是做的时候就很吃力,就是翻棋子直到棋盘上所有棋子的颜色一样为止,求最少翻多少次,方法是枚举递归.然后就打算先做另一道递归的题(从数组中取出n个元素的组合),但是同样在递归的问 ...

  9. 算法—递归生成斐波那契数列

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.递归生成斐波那契数列 二.使用步骤 1.伪代码 2.c 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如 ...

最新文章

  1. 突破性进展!上海光机所成果登上《Nature》封面!
  2. python 异或加密字符串
  3. UNIX再学习 -- 静态库与共享库
  4. Generative Adversarial Networks 生成对抗网络的简单理解
  5. Maven(三):将web项目的war包热部署到远程Tomcat服务器
  6. HLS Pargmas(2) interface
  7. navicat怎么安装mysql数据库_【20170825】从零开始学SQL数据库 安装mysql与navicat,开始练习...
  8. createelement 设置id_还记得你的第一个网络ID是什么吗?
  9. sql between...and 用法(mysql)
  10. 数据特征分析-相关性分析
  11. [html] 用一个div模拟textarea的实现
  12. 怎么增加一个工位?ApiPost工位有什么用?
  13. 人工智能 猴子摘香蕉问题
  14. 操作系统应用阶层现状,对操作系统的认识
  15. unison实现文件双向同步
  16. 地铁3D可视化,让一切尽在掌握
  17. uniapp——uni-admin后台管理系统(使用uniCloud免费云服务器)
  18. OPPO手机设备安装谷歌服务套件GMS,使用Play商店
  19. 论文阅读:Gradient-Induced Co-Saliency Detection(ECCV2020)
  20. 计蒜客 T1817 分解质因数(数论)

热门文章

  1. Linux网络包接收过程的监控与调优
  2. Spring 和 SpringBoot 最核心的 3 大区别,详解!
  3. 必须了解的mysql三大日志-binlog、redo log和undo log
  4. 200 道 Java 面试题解!某阿里 P7 只答上来 70%!
  5. Spotify敏捷模式详解三部曲第一篇:研发团队
  6. 美团分布式服务治理框架OCTO之一:服务治理
  7. 分享Leangoo敏捷工具操作视频
  8. Robot 3D Map Navigation
  9. Java字节流文件流的练习
  10. 庆祝博客积分成功上四位数!