zoukankan      html  css  js  c++  java
  • python之递归

    递归的定义:即对自己自身内容的引用。

    有用的递归函数应包含以下几步份:

    • 当函数直接返回值时有基本的实例(最小可能性问题);
    • 递归实例,包括一个或者多个问题较小部分的递归调用;

    递归的关键就是将问题分解为小部分,说白了就是递归不能无休止的执行下去,因为它总是以最小可能性问题结束。

    递归实现阶乘:

    阶乘的数学定义:

    • 1的阶乘是1;
    • 大于1的数n的阶乘就是n乘n-1的阶乘;
      1 # -*- coding: utf-8 -*-
      2 def factorial(n):
      3     if n==1:
      4         return 1
      5     else:
      6         return n * factorial(n-1)
      7 number = int(input("请输入一个数:"))
      8 print factorial(number)

    递归实现整数的幂:

    幂的递归设计:

    • 对于任何整数x,power(x,0)是1;
    • 对于任何大于0的数来说,power(x,n)是x乘以(x,n-1)的结果;
      1 # -*- coding: utf-8 -*-
      2 def power(x,n):
      3     if n==0:
      4         return 1
      5     else:
      6         return x*power(x,n-1)
      7 x = int(input("请输入整数x: "))
      8 num = int(input("请输入幂整数n:"))
      9 print power(x,num)

    递归实现费纳波切数列:

    • 1,1,2,3,5,8,13,21,34,55,89,144,233,377.............(当n>3时,为前两项之和)
       1 # -*- coding: utf-8 -*-
       2 def sequence(n):
       3     if n==1:
       4         return 1
       5     elif n==2:
       6         return 1
       7     else:
       8         return sequence(n-1)+sequence(n-2)
       9 num = int(input("请输入n:"))
      10 print sequence(num)

      当n很大时,递归实现速度非常慢。

    递归实现汉诺塔:

    算法:当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上。

                当A塔上有两个盘子是,先将A塔上的1号盘子(编号从上到下)移动到B塔上,再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C塔上。

                当A塔上有3个盘子时,先将A塔上编号1至2的盘子(共2个)移动到B塔上(需借助C塔),然后将A塔上的3号最大的盘子移动到C塔,最后将B塔上的两个盘子借助A塔移动到C塔上。

               当A塔上有n个盘子是,先将A塔上编号1至n-1的盘子(共n-1个)移动到B塔上(借助C塔),然后将A塔上最大的n号盘子移动到C塔上,最后将B塔上的n-1个盘子借助A塔移动到C塔上。

              综上所述,除了只有一个盘子时不需要借助其他塔外,其余情况均一样(只是事件的复杂程度不一样)。

     1 # -*- coding: utf-8 -*-
     2 
     3 #该函数表示将x移到z上借助y
     4 def hanoi(n,x,y,z):
     5     if n == 1:
     6         print (x,'-->',z)
     7     else:
     8         #将n-1个盘子从x移到y借助z
     9         hanoi(n-1,x,z,y) #将n-1个盘子从x移到y
    10         print (x,'-->',z)#将最后一个盘子从x移到z上
    11         # 将n-1个盘子从y移到z借助x
    12         hanoi(n-1,y,x,z) #将y上n-1个盘子移到z上
    13 num = int(input("请输入层数:"))
    14 hanoi(num,'A','B','C')
  • 相关阅读:
    下载commons-fileupload-1.2.1.jar和commons-io-2.0.jar驱动包
    Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The server may
    jQury 入门 2 包装集
    JQuery 入门 1 ---定位
    JDBC连接mysql
    JSTL 的引入 JSTL包的下载
    mysql 的具体应用
    mysql 绿色版本的应用
    kong网关: service+route+upstream
    kong网关命令(一)
  • 原文地址:https://www.cnblogs.com/weilai1/p/5993512.html
Copyright © 2011-2022 走看看