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)