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)

 

posted @ 2018-01-28 18:05  消灭猕猴桃  阅读(289)  评论(0编辑  收藏  举报