码迷,mamicode.com
首页 > 编程语言 > 详细

Python3 的递归

时间:2018-01-28 19:09:38      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:二进制   条件   自身   ==   gpo   ret   最大   数列   nbsp   

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)

 

Python3 的递归

标签:二进制   条件   自身   ==   gpo   ret   最大   数列   nbsp   

原文地址:https://www.cnblogs.com/PythonFCG/p/8371807.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!