• Python3 的递归


    1、递归的条件:

    1、有调用函数自身

    2、设置正确的返回条件

    2、斐波那契数列的实现

    #递归方法,分治思想  
    def fibonacci(n):
        if n<1:
            print("输入有误")
            return -1
        if n==1 or n==2:
            return 1
        else:
            return fibonacci(n-1)+fibonacci(n-2)
    #迭代方法      
    def fibonacci1(n):
        f1=1
        f2=1
        if n<1:
            print("输入有误")
            return -1
        for i in range(1,n+1):
            if i==1 or i==2:
                result=1
            else:
                result=f1+f2
                f1=f2
                f2=result
        print(result) 

    3、pow()函数的递归实现

    def power(x,y):
        '递归形式'
        if y==0:
            return 1
        else:
            return x*power(x,y-1)
    
    def power1(x,y):
        '非递归形式'
        result=1
        while y:
            result*=x
            y-=1
        print(result)
        

    4、递归方式求最大公约数

    def gcd(x,y):
        
        if x%y ==0:
            print(y)
        else:
            #x=y
            #y=r
            gcd(y,x%y)

    5、汉诺塔

    def hannoi(n,x,y,z):
        if n ==1:
            print(x,'--->',y)
        else:        
            hannoi(n-1,x,z,y)#先将N-1层从x移到y上
            print(x,'--->',z)#再将第n层从x移到z上
            hannoi(n-1,y,x,z)#再将N-1层从y移到z上

    6、十进制转二进制递归实现

    def ddbin2(x):    
        result=''
        if x:       
            result=ddbin2(x//2)
            return result+str(x%2)
        else:
            return result
    print(ddbin2(2))

    7、回文联递归实现

    def hui(x):
        lens=len(x)
        for i in range(lens):
            if x[i]==x[lens-i-1]:
                if i==lens//2:
                    print("是回联文")
            else:
                print("no!!")
                return 0
    #hui("上海自来水来自海上")
    #hui("12231")
    
    def hui2(x):
        i=0
        lens=len(x)
        if x[0] ==x[lens-1]:
            i=i+1
            y=x[i:lens-i]
            print(x[i:lens-i])
            if len(y)==1 or len(y)==2:
                print("是回文联")
                return 1
            hui2(y)
        else:
            print("不是回文联")
            return 0
         
            
                       
    hui2("上海自来水来自海上")
    hui2("楼望海海望楼")
    hui2("jhkhkkhh")
    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 0
            
    string = input('请输入一串字符串:')
    length = len(string)-1
    
    if is_palindrome(string, 0, length):
            print('"%s"是回文字符串!' % string)
    else:
            print('"%s"不是回文字符串!' % string)
  • 相关阅读:
    【原创】开源Math.NET基础数学类库使用(01)综合介绍
    【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合
    【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成
    apply,call,bind的区别
    javascript替换手机号中间4位
    css常见的概念
    关于URL编码/javascript/js url 编码
    jquery判断div滚动条到底部
    javascript中的array对象属性及方法
    localStorage和sessionStorage区别
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/8371807.html
Copyright © 2020-2023  润新知