函数递归的定义
递归是指一个函数在执行过程中不断调用自身,直至满足某个条件退出。在Python中,递归函数需要包含一个基本情况,即退出条件,否则会一直调用自身导致无限循环。递归函数可以用于解决某些问题,比如遍历树或搜索算法。然而,递归函数可能会导致栈溢出或效率低下。因此,在使用递归函数时需要小心并特别注意。
常见题型
有一群猴子,去摘了一堆桃子,商量之后决定每天吃剩余桃子的一半。可是当每天大家吃完桃子之后,有个贪心的小猴都会偷偷再吃一个桃子。按照这样的方式猴子们每天都快乐的吃着桃子,直到第十天,当大家再想吃桃子时,发现只剩下一个桃子了。
问:猴子们一共摘了多少桃子?
要求 1.使用递归思想编程
2. 提供代码截图和运行结果截图
3.运行结果要由“猴子们一共摘了**个桃子”类似的语句组成
def count_peaches(day, peach):
if day == 1:
return peach
else:
return count_peaches(day-1, (peach+1)*2)
peach_num = count_peaches(10, 1)
print("猴子们一共摘了{}个桃子".format(peach_num))
杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。杨辉三角形中的数是(x+y)的N次幂的展开式各项系数。杨辉三角的第n行有n个元素,其中首尾两个元素为1,中间每个元素等于上一行对应的两个元素之和。
请根据用户给出的行数(行数>5)打印出相应的杨辉三角.
要求1.使用递归思想编程
2. 提供代码截图和运行结果截图
3.运行结果开始要由“请输入需要输出的杨辉三角行数: ”类似的语句开始。
代码:
def pascal_triangle(n):
if n == 1:
return [[1]]
else:
triangle = pascal_triangle(n-1)
row = [1]
for i in range(1, n-1):
row.append(triangle[-1][i-1] + triangle[-1][i])
row.append(1)
triangle.append(row)
return triangle
n = int(input('请输入需要输出的杨辉三角行数:'))
triangle = pascal_triangle(n)
for row in triangle:
print(' '.join(str(num) for num in row))
这道题可以参考
https://blog.csdn.net/m0_62338174/article/details/128557041?spm=1001.2014.3001.5501
年龄问题
有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁。问第4个人多少岁,他说比第3个人大2岁。问第3人多少岁,他说比第2个人大2岁。问第2个人多少岁,他说比第1个人大2岁。最后问第1个人,他说他是10岁。
请编写程序,输出所有人的对应的年龄(从第1个人开始)
要求 1.使用递归思想编程
2. 提供代码截图和运行结果截图
3.运行结果每行要由“第*个人的年龄为*”类似的语句组成
def get_age(n):
if n == 1:
return 10
return get_age(n-1) + 2
for i in range(1, 6):
print("第%d个人的年龄为%d" % (i, get_age(i)))
A、B、C、D、E这5个⼈合伙夜间捕鱼,凌晨时都已经疲惫不堪,于是各自在河边的树丛中找地方睡着了。第二天日上三竿时,A 第⼀个醒来,他将鱼平分为5份,把多余的⼀条扔回河中,然后拿着自己的⼀份回家去了;B第二个醒来,但不知道A已经拿走了⼀份鱼,于是他将剩下的鱼平分为5份,扔掉多余的⼀条,然后只拿走了自己的⼀份;接着C、D、E依次醒来,也都按同样的办法分鱼。问这5人至少合伙捕到多少条鱼?每个人醒来后所看到的鱼是多少条?
要求 1.使用递归思想编程
2. 提供代码截图和运行结果截图
3.运行结果由“5个人至少合伙捕到**条鱼”和“第*个人醒来看到**条鱼”语句构成
def fish_count(people_count):
if people_count == 1:
return 5
else:
return (fish_count(people_count-1)*4)//5
for i in range(1, 6):
print("第{}个人醒来看到{}条鱼".format(i, fish_count(i)))
print("5个人至少合伙捕到{}条鱼".format(fish_count(5)))
输入一个十进制整数,输出其对应的二进制数字
方法:用2整除十进制整数,得到一个商和余数;再用2去除商,又会得到一个商和余数,如此重复,直到商为小于1时为止,然后把先得到余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,以此排列起来。
要求 1.使用递归思想编程
2. 提供代码截图和运行结果截图
3.运行结果由“请输入一个整数:”和“其二进制数为:”语句构成
def decimalToBinary(n):
if n >= 1:
decimalToBinary(n // 2)
print(n % 2, end='')
if __name__ == '__main__':
decimal = int(input("请输入一个整数:"))
print("其二进制数为:", end='')
decimalToBinary(decimal)
最大公约数和最小公倍数
输入两个整数 a和b,输出它们的最大公约数
注:求最大公约数可以使用辗转相除法:
假设a>b>0,那么a和b的最大公约数等于b和a%b的最大公约数,然后把b和a%b作为新一轮的输入。直到a%b等于0的时候,b的值就是所要求的最大公约数。
最小公倍数思路:(1)最小公倍数=a*b/最大公约数
(2)从1开始递增寻找第一个,既能整除a,也能整除b的整数
要求 1.使用递归思想编程
2. 提供代码截图和运行结果截图
3.运行结果由“请输入一个正整数:”、“请输入第二个正整数:”、“**和**的最大公约数为**”和“**和**的最小公倍数为**”语句构成
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
def lcm(a, b):
return a * b // gcd(a, b)
num1 = int(input("请输入第一个正整数:"))
num2 = int(input("请输入第二个正整数:"))
gcd_result = gcd(num1, num2)
lcm_result = lcm(num1, num2)
print(f"{num1}和{num2}的最大公约数为{gcd_result}")
print(f"{num1}和{num2}的最小公倍数为{lcm_result}")