[递归]母牛的故事
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例输入
2
4
5
0
样例输出
2
4
6
要求:当n数值较大时,程序速度尽可能快 #include<stdio.h>
int main()
{
int n;
int count;
count = count = count = 1;
count = 1;
while(1)
{
scanf("%d",&n);
if(n == 0)
break;
int index = 1;
while(index <= n)
{
count = count + count;
index++;
}
printf("%d",count);
}
return 0;
}
本帖最后由 qq1151985918 于 2021-2-7 11:17 编辑
import functools
@functools.lru_cache()
def getnum(year):
if year > 1:
num = getnum(year - 1) + getnum(year - 3)
return num
else:
return 1
while True:
n = input("输入n:")
if n == "0":
break
print(getnum(int(n))) 小甲鱼的铁粉 发表于 2021-2-7 10:19
python{:10_285:} 本帖最后由 小甲鱼的铁粉 于 2021-2-7 11:06 编辑
count = []
count.append(1)
count.append(1)
count.append(1)
count.append(1)
while True:
n = eval(input())
if n == 0:
break
index = 1
while index <= n:
result = count + count
count.append(result)
index += 1
print(count)
代码比较冗余,但是速度可以 qq1151985918 发表于 2021-2-7 10:26
答案是正确的,但是运行getnum(54)速度非常缓慢 逃兵 发表于 2021-2-7 11:10
答案是正确的,但是运行getnum(54)速度非常缓慢
import functools
@functools.lru_cache()
def getnum(year):
if year > 1:
num = getnum(year - 1) + getnum(year - 3)
return num
else:
return 1
while True:
n = input("输入n:")
if n == "0":
break
print(getnum(int(n)))
小甲鱼的铁粉 发表于 2021-2-7 11:04
代码比较冗余,但是速度可以
运行速度很快,但是没有用到递归,有没有速度快的递归方法{:10_254:} 逃兵 发表于 2021-2-7 11:17
运行速度很快,但是没有用到递归,有没有速度快的递归方法
看我给你的新的速度飞起 qq1151985918 发表于 2021-2-7 11:18
看我给你的新的速度飞起
这是什么神奇的方法,能给我讲解一下吗 逃兵 发表于 2021-2-7 11:20
这是什么神奇的方法,能给我讲解一下吗
原理我也不懂啊,就是知道 这个修饰符 可以极大幅度加快递归运算速度 qq1151985918 发表于 2021-2-7 11:23
原理我也不懂啊,就是知道 这个修饰符 可以极大幅度加快递归运算速度
好的谢谢,我写的代码也是因为效率问题一直显示超时。
学到了让递归运算起飞的新方法
页:
[1]