|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 高渐飞 于 2018-7-16 15:20 编辑
- #知识点总结
- #(1)递归即函数内部自己调用自己;必须要有正确的返回值;
- #(2)每次递归都需要建栈,弹栈,清理,消耗内存,因此当递归无返回值或返回值错误时,会导致代码无休止的运行直到程序崩溃
- #(3)斐波那契数列,又称黄金分割数列,兔子序列,F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
- #(4)汉诺塔:假设汉诺塔有x,y,z三根柱子,已知柱子x上有n个盘子,盘子大小各不相同呈金字塔状放置;
- # 要求将n个盘子从柱子x上移到柱子z上,条件是每次只能移到一个盘子,而且必须永远是大盘子在下小盘子在上的移到状态。
- # 将n个盘子从柱子x移到柱子z上,无法直接实现该过程,需借助柱子y;
- # 首先,将柱子x上的n-1个盘子移动到柱子y上;
- # 然后,将柱子x上最后一个盘子移动到柱子z上;
- # 最后,将柱子y上的n-1个盘子移动到柱子z上。
- #练习部分
- #coding: UTF-8
- #1.实现阶乘
- def factorial(n):
- if n == 1:
- return 1
- else:
- return n * factorial(n-1)
- number = int(input('请输入一个正整数:'))
- result = factorial(number)
- print("%d 的阶乘是:%d" % (number, result))
- #2.用迭代法(循环)实现斐波那契数列,并输出
- def fab(n):
- n1 = 1
- n2 = 1
- temp="1 1"
- if n < 1:
- print('输入有误!')
- return -1
- else:
- print("0-n之间的斐波那契数列为:\n",temp,end=" "),
- while (n-2) > 0:
- n3 = n1 + n2
- n1 = n2
- n2 = n3
- n -= 1
- print(n3,end=" ") #使用end=" "可以避免换行,end默认为"\n"
- return n3
-
- num = int(input("请输入数列的层数:"))
- result = fab(num)
- if result != -1:
- print('\n总共有%d对小兔崽子诞生!' % result)
- #3.用递归法实现斐波那契数列,并输出
- def fab(n):
- if n < 0:
- print("输入有误!")
- elif n ==1 or n==2:
- return 1
- else:
- return fab(n-1) + fab(n-2)
-
- num = int(input("请输入数列的层数:"))
- if num <= 0:
- print("请输入正整数!")
- else:
- print("0-n之间的斐波那契数列为:\n",end=' ')
- for i in range(1,num+1):
- print(fab(i), end="; ")
- #4.汉诺塔
- def hanoi(n, x, y, 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')
复制代码 |
|