递归递推练习题答案

news2025/2/24 11:10:08

1.用递归的方法1+2+3+…+N的值(in:5,out:15)

def dg(n):
    if n==1:
        return 1
    else:
        return dg(n-1)+n
n=int(input())
print(dg(n))

2.输出斐波那契数列的第N项,0,1,1,2,3,5,8,13…(in:3,out:1)

def feibo(n):
    if n==1:
        return 0
    if n==2 or n==3:
        return 1
    return feibo(n-1)+feibo(n-2)
n=int(input())
print(feibo(n))

3.求n!(in:5,out:120)n!=123…*n

def fact(n):
    if n==0 or n==1:
        return 1
    return fact(n-1)*n
n=int(input())
print(fact(n))

4.阿克曼(ackmann)函数A(m,n)中,m,n定义域是非负整数(m<=3,n<=10),函数值定义为(m,n in:2 3,out:9):
在这里插入图片描述

def akm(m,n):
    if m==0:
        return n+1
    elif m>0 and n==0:
        return akm(m-1,1)
    elif m>0 and n>0:
        return akm(m-1,akm(m,n-1))
a=input().split(' ')
print(akm(int(a[0]),int(a[1])))

5.有5个人坐在一起,问第五个人多少岁,他说比第四个人大1岁;问第四个人多少岁,他说比第三个人大一岁;问第三个人多少岁,他说比第二个人大一岁,问第二个人多少岁,他说他比第一个人大一岁,问第一个人多少岁,他说他8岁,请问第5个人多少岁。(in:5,Out:12)

def age(n):
    if n==1:
        return 8
    return age(n-1)+1
n=int(input())
print(age(n))

6.儿童节那天,有6位同学参加了钓鱼比赛,他们每个人钓到的鱼的数量都各不相同。问第一位同学钓了多少条鱼时,他指着第二位同学说比他多钓两条,问第二位同学,他又说比第三位同学多钓了两条鱼。最后问到第6位同学时,他又说自己钓了3条鱼。请问第一位同学钓了多少条鱼?(in:1,out:13)

def fish(n):
    if n==6:
        return 3
    return fish(n+1)+2
n=int(input())
print(fish(n))

7.设一共有n级台阶的楼梯,某人每步可走1级,也可以走2级,用递推的方式可以计算出某人从底层开始走完全部台阶的走法。例如,当n=3时,共有3种走法,即1+1+1,1+2,2+1.当n=6时,从底层开始走完全部台阶的走法共有多少种?(dt)

def stairs(n):
    if n==1:
        return 1
    if n==2:
        return 2
    return stairs(n-1)+stairs(n-2)
n=int(input())
print(stairs(n))

8.小马需要将N件物品从河的一岸搬运到河的另一岸,每次搬运的物品为1到3件。请问小马将N件物品全部搬运过去有多少种方案
例如: N=3,将3件物品全部搬运过去有4种方案:
方案一: 第一次搬运1件,第一次搬运1件,第三次搬运1件;
方案二: 第一次搬运1件,第二次搬运2件;
方案三: 第一次搬运2件,第二次搬运1件:
方案四: 一次搬运3件。
输入描述
输入一个正整数N,表示需要搬运的物品数输出描述输出将N件物品全部搬运过去有多少种方案
样例输入:3
样例输出:4
样例输入:4
样例输出:7

def river(n):
    if n==1:
        return 1
    if n==2:
        return 2
    if n==3:
        return 4
    return river(n-1)+river(n-2)+river(n-3)
print(river(4))

9.设计一个算法,汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。有三个单字符字符串和一个整数。三个字符表示三个杆子的编号,整数为盘子的数目。
根据上述计算规则,补全下列代码。
函数名:hannota(n,a,b,c)
参数表:n – 正整数表示盘子数,a --a杆子,b --b杆子,c --c杆子。
返回值:移动路径。
示例:n=3,返回:
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C

sum=0
def hainu(n,a,b,c):
    global sum
    if n==1:
        sum+=1
        print(a,"->",c)
    else:
        hainu(n-1,a,c,b)
        hainu(1,a,b,c)
        hainu(n-1,b,a,c)
hainu(3,"a","b","c")
print(sum)

10.有一张 m*n 个小方格的地图,一个机器人位于地图的左上角(如图标记为Start 的地方),它每步只能向右或者向下移动一格,如果走到右下角的终点(如图标记为 Finish 的地方),有多少种不同的方法?

例如,一个 3x2 的地图,行走的方法数是 3 种,分别是
1.右>右>下
2.右>下->右
3.下->右>右
输入描述: 两个整数 m(m<=100)和 n(n<=100),代表地图的行数和列数
输出描述: 一个整数,表示行走的方法数。
[样例输入]
88
[样例输出]
3432

m=int(input())
n=int(input())
sum=0
def mm(a,b):
    global sum
    if a>m:
        return
    if b>n:
        return
    if a==m and b==n:
        sum+=1
    mm(a+1,b)
    mm(a,b+1)
mm(1,1)
print(sum)

10.描述
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
输入
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
输出
对输入的每组数据M和N,用一行输出相应的K。
样例输入
1
7 3
样例输出
8

def apple(m,n):#m:苹果数,n:盘子数
    if m==0:
        return 1
    if n==0:
        return 0
    if n>m:
        return apple(m,m)
    return apple(m,n-1)+apple(m-n,n)
print(apple(7,3))

11.描述
给出一个正整数a,要求分解成若干个正整数的乘积,即a = a1 * a2 * a3 * … * an,并且1 < a1 <= a2 <= a3 <= … <= an,问这样的分解的种数有多少。注意到a = a也是一种分解。
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a (1 < a < 32768)
输出
n行,每行输出对应一个输入。输出应是一个正整数,指明满足要求的分解的种数
样例输入
2
2
20
样例输出
1
4

def fun(a,b):
    if a==1:
        return 1
    if b==1:
        return 0
    if a%b==0:
        return fun(a//b,b)+fun(a,b-1)
    return fun(a,b-1)
n=int(input())
for i in range(n):
    m=int(input())
    print(fun(m,m))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/501660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GIT:git 教程

1. 版本控制 版本控制&#xff08;Revision Control&#xff09;用于在开发过程中管理文件修改历史&#xff0c;方便查看和备份。 它的作用如下&#xff1a; 实现跨区域多人协同开发。追踪和记载一个或者多个文件的历史记录。组织和保护你的源代码和文档。统计工作量。并行开…

Java EE企业级应用开发(SSM)第9章

第9章MyBatis入门 一.预习笔记 1.MyBatis框架的特点 1-1.简单易学 1-2.灵活 1-3.提供映射标签 2.MyBatis核心类 2-1.Configuration 2-2.SqlSessionFactory 2-3.SqlSession 2-4.Exector 2-5.MappedStatement 3.MyBatis工作流程 4.Mybatis入门程序 4-0&#xff1a;导…

RFID安全的三次认证

一.RFID介绍 RFID是Radio Frequency Identification的缩写&#xff0c;即射频识别。它是一种通过用电磁场收集数据并从远距离自动识别物体的技术。它使用无线电波来将信息从一个电子标签传输到读卡器中&#xff0c;而不需要直接接触。这些标签可以嵌入到物品中或附加到物品表面…

用Python给模板邮件加彩蛋

需求是这样来的&#xff0c;笔者写了很多的邮件通知模板&#xff0c;里面的内容都是千篇一律的&#xff0c;比如说&#xff0c;***你好&#xff0c;请查收附件什么什么报告&#xff0c;然后在署名&#xff0c;结束。这样的模板邮件会一直发下去&#xff0c;用户看久了会很单调。…

基于C#制作的锁屏小工具,点击图片内容解锁

自己制作的一个无厘头电脑锁屏工具被同事发现了&#xff0c;纷纷要求给他们量身定制安排一套 一、开发步骤1.1 创建项目1.2 窗体设置1.3 键盘钩子事件1.4 解锁按钮设置 一、开发步骤 1.1 创建项目 打开Visual Studio&#xff0c;右侧选择创建新项目。 搜索框输入winform&#…

makefile 结构规则,依赖,伪目标

文章目录 前言一、Makefile 规则格式二、依赖示例&#xff1a;依赖的规则 三、伪目标1. makefile 中的伪目标&#xff1a;2. 伪目标的语法3. 伪目标的规则调用4. 绕开 .PHONY关键字定义伪目标 四、小技巧&#xff1a;1. 命令无回显。2. 可执行文件 和 all 同时作为 makefie 中的…

MOS管常见的故障分析

MOS在控制器电路中的工作状态&#xff1a;开通过程&#xff08;由截止到导通的过渡过程&#xff09;、导通状态、关断过程&#xff08;由导通到截止的过渡过程&#xff09;、截止状态。MOS主要损耗也对应这几个状态&#xff0c;开关损耗&#xff08;开通过程和关断过程&#xf…

学java注解,看这一篇文章就够了

一、注解的概念 Annotation(注解)是一种标记&#xff0c;使类或接口附加额外信息&#xff0c;帮助编译器和 JVM 完成一些特定功能。 Annotation(注解)也被称为元数据(Metadata)是JDK1.5及以后版本引入的&#xff0c;用于修饰包、类、接口、字段、方法参数、局部变量等。 常见…

Powered by 平行云 | 我们与大有艺术一起,在玩儿一种很新的戏剧

可以用VR看的&#xff0c;才是真元宇宙&#xff01; 平行云赋能大有艺术&#xff0c;开启孟京辉导演的元宇宙「沉浸式」戏剧《浮士德》。"全球第一场可以用VR看的元宇宙戏剧"是什么的体验&#xff1f; 让我们一起一探究竟&#xff01; 你慢慢地走进了一片无边无际的…

巧用千寻位置GNSS软件| 铁路放样必备技巧

铁路放样是在铁路测量施工前的一项重要工作&#xff0c;千寻位置GNSS软件可轻松实现铁路放样&#xff0c;本期就和大家分享具体操作步骤。 点击【测量】->【铁路放样】&#xff0c;在线路库中选择一条线路点击【确定】直接进入线路中 心线放样&#xff0c;如图 5.16-1所示。…

实现方法、构造器位置的自动装配

1.Autowired注解概述 Autowired注解的源码 package org.springframework.beans.factory.annotation;import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPoli…

Uint8Array文件下载

vue项目&#xff0c;自己调用了阿里云OSS的SDK&#xff0c;进行文件的上传以及下载&#xff0c;有个功能是列表中的附件需要支持点击下载&#xff0c;这里就用到阿里云oss的文件下载&#xff0c;使用了Nodejs的SDK const OSS require(ali-oss); const client new OSS({...op…

nodejs+vue网上学生社团管理系统

并运用Photoshop CS6技术美化网页&#xff0c;辅之以CSS技术。系统是基于面向对象编程的web应用程序。本系统主要实现的功能有系统用户管理、社团信息管理、社团类别管理、社团活动管理、社团论坛管理、系统管理、个人资料管理、学生入团管理、社团公告管理、社团活动管理、社团…

Ubuntu22.04安装opencv依赖包libjasper-dev出现unable to locate libjasper-dev的终极解决办法

执行 sudo apt install libjasper-dev 提示 执行 sudo apt install libjasper1 libjasper-dev 仍然提示 更换软件源&#xff1a; sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" sudo apt-get update提示 该仓库没有数…

tiechui_lesson05_内核小文件拷贝

主要学习在内核中的文件操作&#xff0c;包括文件的打开&#xff0c;创建&#xff0c;读取&#xff0c;写入&#xff0c;查询文件属性等。 涉及的API和宏函数 ZwOpenFileZwCreateFileZwQueryInformationFileZwReadFileZwWriteFileZwCloseInitializeObjectAttributes 1.文件的…

学习日记,java学习

题目 生病了,可能是羊了,喉咙好干,好难受 每日一题 1010. 总持续时间可被 60 整除的歌曲 难度中等268收藏分享切换为英文接收动态反馈 在歌曲列表中&#xff0c;第 i 首歌曲的持续时间为 time[i] 秒。 返回其总持续时间&#xff08;以秒为单位&#xff09;可被 60 整除的…

vue+elementui在线教学互动学习考试系统nodejs师生互动交流网站kpm58

语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 前端vueelementui, (1) vue引入elementui 1.使用npm安装element-ui npm i element-ui -S 2.在main.js中导入使用vue import element-u…

Android WorldWind的使用与加载数方瓦片

明确下定义&#xff0c;数方瓦片也叫五层十五级瓦片。现记录下如何在World Wind Android中加载数方瓦片的方法。 原理 加载数方瓦片最核心的方法是WorldWindAndroid加载图片的方法&#xff0c;更加详细的使用说明请访问worldwind官网。核心代码如下&#xff1a; Sector sect…

Daimayuan Online Judge #613. 好序列(思维题 暴力/启发式分裂)

题目 思路来源 知乎严格鸽 (暴力/启发式分裂)代码源每日一题 Div1 好序列 - 知乎 题解 启发式分裂&#xff0c;可以认为是启发式合并的逆过程 比较直白的想法是找到第一个只出现一次的数的位置x&#xff0c;然后分治[1,x-1]和[x1,n] 但是这样最坏复杂度是O(n^2)的&#xf…

数字化转型对企业的好处有哪些(上)

过时的技术、流程和客户关系管理困难是当前阻碍企业增长的主要障碍&#xff0c;CRM系统是企业数字化转型的主要工具&#xff0c;帮助企业简化操作、提高效率&#xff0c;为客户提供更加卓越的客户体验。下面说说&#xff0c;企业数字化转型的十大好处。 放眼全球来看&#xff…