递归与斐波那契数列

在这里插入图片描述
迭代实现

def fab(n):
     a1=1
     a2=1
     a3=1

     if n<1:
          print("输入有误!")
          return  -1

     while(n-2)>0:
          a3=a1+a2
          a1=a2
          a2=a3
          a -= 1

     return a3


result = fab(20)
if result!= -1:
     print('总共有%d对小兔子诞生' % result)

递归的思想
在这里插入图片描述递归实现

def fab(n):
     if n<1:
          print('输入有误!')
          return -1
     if n==1 or n==2:
          return 1
     else:
          return fab(n-1)+fab(n-2)


result = fab(20)
if result!=-1:
     print('总共有%d对小兔子诞生' % result)

总共有6765对小兔子诞生

课后题:
1.使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式)。
2.写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==> [1, 2, 3, 4, 5]
3.还记得求回文字符串那道题吗?现在让你使用递归的方式来求解,亲还能骄傲的说我可以吗?
4.使用递归编程求解以下问题:
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

解:
1.

def Dec2Bin(dec):
    result = ''
    
    if dec:
        result = Dec2Bin(dec//2)
        return result + str(dec%2)
    else:
        return result

print(Dec2Bin(62))

result = []
def get_digits(n):
        if n > 0:
                result.insert(0, n%10)
                get_digits(n//10)

get_digits(12345)
print(result)

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)

def age(n):
    if n == 1:
        return 10
    else:
        return age(n-1) + 2
        
print('哈哈,我知道了,第五个人的年龄是 %d 岁,啵啵脆!' % age(5))

发布了138 篇原创文章 · 获赞 203 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qinshangwy/article/details/104028110