鱼C论坛

 找回密码
 立即注册
查看: 3120|回复: 0

[学习笔记] A-10-递归总结与练习

[复制链接]
发表于 2018-7-12 15:50:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 高渐飞 于 2018-7-16 15:20 编辑
  1. #知识点总结
  2. #(1)递归即函数内部自己调用自己;必须要有正确的返回值;
  3. #(2)每次递归都需要建栈,弹栈,清理,消耗内存,因此当递归无返回值或返回值错误时,会导致代码无休止的运行直到程序崩溃
  4. #(3)斐波那契数列,又称黄金分割数列,兔子序列,F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
  5. #(4)汉诺塔:假设汉诺塔有x,y,z三根柱子,已知柱子x上有n个盘子,盘子大小各不相同呈金字塔状放置;
  6. #   要求将n个盘子从柱子x上移到柱子z上,条件是每次只能移到一个盘子,而且必须永远是大盘子在下小盘子在上的移到状态。
  7. #   将n个盘子从柱子x移到柱子z上,无法直接实现该过程,需借助柱子y;
  8. #      首先,将柱子x上的n-1个盘子移动到柱子y上;
  9. #      然后,将柱子x上最后一个盘子移动到柱子z上;
  10. #      最后,将柱子y上的n-1个盘子移动到柱子z上。

  11. #练习部分
  12. #coding: UTF-8

  13. #1.实现阶乘
  14. def factorial(n):
  15.     if n == 1:
  16.         return 1
  17.     else:
  18.         return n * factorial(n-1)

  19. number = int(input('请输入一个正整数:'))
  20. result = factorial(number)
  21. print("%d 的阶乘是:%d" % (number, result))


  22. #2.用迭代法(循环)实现斐波那契数列,并输出
  23. def fab(n):
  24.     n1 = 1
  25.     n2 = 1   
  26.     temp="1 1"
  27.     if n < 1:
  28.         print('输入有误!')
  29.         return -1
  30.     else:
  31.         print("0-n之间的斐波那契数列为:\n",temp,end=" "),
  32.         while (n-2) > 0:
  33.             n3 = n1 + n2
  34.             n1 = n2
  35.             n2 = n3
  36.             n -= 1
  37.             print(n3,end=" ")      #使用end=" "可以避免换行,end默认为"\n"
  38.         return n3
  39.    
  40. num = int(input("请输入数列的层数:"))
  41. result = fab(num)
  42. if result != -1:
  43.         print('\n总共有%d对小兔崽子诞生!' % result)


  44. #3.用递归法实现斐波那契数列,并输出
  45. def fab(n):
  46.     if n < 0:
  47.         print("输入有误!")
  48.     elif n ==1 or n==2:
  49.         return 1
  50.     else:
  51.         return fab(n-1) + fab(n-2)
  52.    
  53. num = int(input("请输入数列的层数:"))
  54. if num <= 0:
  55.     print("请输入正整数!")
  56. else:
  57.     print("0-n之间的斐波那契数列为:\n",end=' ')
  58.     for i in range(1,num+1):
  59.         print(fab(i), end="; ")

  60. #4.汉诺塔
  61. def hanoi(n, x, y, z):
  62.     if n == 1:
  63.         print(x, ' --> ', z)
  64.     else:
  65.         hanoi(n-1, x, z, y)   #将前n-1个盘子从x移动到y上
  66.         print(x, ' --> ', z ) #将最底下的最后一个盘子从x移动到z上
  67.         hanoi(n-1, y, x, z)   #将y上的n-1个盘子移动到z上

  68. n = int(input('请输入汉诺塔的层数:'))
  69. hanoi(n, 'x', 'y', 'z')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 16:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表