逃兵 发表于 2021-2-7 10:04:36

[递归]母牛的故事

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

输入
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。

输出
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。

样例输入
2
4
5
0

样例输出
2
4
6


要求:当n数值较大时,程序速度尽可能快

小甲鱼的铁粉 发表于 2021-2-7 10:19:52

#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 10:26:18

本帖最后由 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:33:26

小甲鱼的铁粉 发表于 2021-2-7 10:19


python{:10_285:}

小甲鱼的铁粉 发表于 2021-2-7 11:04:38

本帖最后由 小甲鱼的铁粉 于 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)
      

      

代码比较冗余,但是速度可以

逃兵 发表于 2021-2-7 11:10:39

qq1151985918 发表于 2021-2-7 10:26


答案是正确的,但是运行getnum(54)速度非常缓慢

qq1151985918 发表于 2021-2-7 11:15: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:17:11

小甲鱼的铁粉 发表于 2021-2-7 11:04
代码比较冗余,但是速度可以

运行速度很快,但是没有用到递归,有没有速度快的递归方法{:10_254:}

qq1151985918 发表于 2021-2-7 11:18:04

逃兵 发表于 2021-2-7 11:17
运行速度很快,但是没有用到递归,有没有速度快的递归方法

看我给你的新的速度飞起

逃兵 发表于 2021-2-7 11:20:17

qq1151985918 发表于 2021-2-7 11:18
看我给你的新的速度飞起

这是什么神奇的方法,能给我讲解一下吗

qq1151985918 发表于 2021-2-7 11:23:17

逃兵 发表于 2021-2-7 11:20
这是什么神奇的方法,能给我讲解一下吗

原理我也不懂啊,就是知道 这个修饰符 可以极大幅度加快递归运算速度

逃兵 发表于 2021-2-7 11:28:04

qq1151985918 发表于 2021-2-7 11:23
原理我也不懂啊,就是知道 这个修饰符 可以极大幅度加快递归运算速度

好的谢谢,我写的代码也是因为效率问题一直显示超时。
学到了让递归运算起飞的新方法
页: [1]
查看完整版本: [递归]母牛的故事