【头歌】函数的递归调用

news2024/9/20 16:48:46

第1关:编写递归函数方法求x的n次方 (要求n>=0)

任务描述

本关任务:编写递归函数方法求x的n次方 (要求n>=0)。

相关知识

递归法

在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归

若调用自身,称之为直接递归。若过程或函数p调用过程或函数q,而q又调用p,称之为间接递归

下面主要介绍直接递归。

一般地,递归模型由两部分组成,一部分为递归出口,它给出了递归的终止条件。另一部分为递归体,它确定递归求解时的递推关系。

例如:计算n阶乘的程序在数学上可以定义为:

则递归算法求n阶乘的伪代码为:

int fact(int n)
{    
    if(n == 0)        
    return 1;    
    else        
    return n * fact(n - 1);
}

上面例子中的f(0)=1就是递归出口; f(n)=n*f(n-1)就是递归体。

要注意一下两点:

  • 递归调用的次数必须是有限的。

  • 必须有结束递归的条件来终止递归。

递归算法求解过程的特征:

  • 先将不能直接求解的问题转换成若干个相似的小问题,通过分别求解各子问题,最后获得整个问题的解。

  • 当这些子问题不能直接求解时,还可以再将它们转换成若干个更小的子问题,如此反复进行,直到遇到递归出口为止。

  • 这种自上而下将问题分解、求解,再自上而下引用、合并,求出最后解答的过程称为递归求解过程。这是一种分而治之的算法设计方法。

求x的n次方的求解过程可以写出递归定义:

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

平台会对你编写的代码进行测试:

测试输入: 2.3,5 预期输出: 64.363430

测试输入: 2.3,-5 预期输出: n<0,data error!

``


开始你的任务吧,祝你成功!

代码示例

#include <stdio.h>
double power(double x,int n)
{
    /********** Begin **********/ 
    if(n<0) 
    return 0;
    else if (n==0)
    return 1;
    else if (n==1)
    return x;
    else
    return x*power(x,n-1) ;

    /********** End **********/
}

int main( )
{ 
    int n; 
    double  x, y;
    scanf("%lf,%d",&x,&n);
    y = power(x,n);
    if(y!=0)
    {
    	printf("%lf\n",y);
    }
    else
    printf("n<0,data error!");
    
    return 0;
}

第2关:编写递归函数求小于等于n的所有正整数之和

任务描述

本关任务:编写递归函数求小于等于n的所有正整数之和。

相关知识

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

平台会对你编写的代码进行测试:

测试输入: 10 预期输出: 55

提示: 1+2+3+4+5+6+7+8+9+10=55


开始你的任务吧,祝你成功!

代码示例

#include <iostream>
using namespace std;
int add(int n);
int main()
{
    int n;
    int b;
    cin>>n;
    b = add(n);
    cout<<b<<endl;
    return 0;
}
int add(int n)
{
/********** Begin **********/ 
if(n==1)
return 1;
else return n+add(n-1);

/********** End **********/
}

第3关:编写递归函数求数组元素的和

任务描述

本关任务:编写递归函数求数组从起始序号到结束序号之间数组元素的和。

相关知识

可以根据数组下标来设置递归执行的调用以及终止条件。 要计算数组a从起始序号start到结束序号end之间数组元素的和: (1)如果数组a起始序号start等于结束序号end,那么返回值为此序号数组元素值a[start]。 (2)如果数组a起始序号start小于结束序号end,那么返回值为a[start]与数组a从start+1到end的之间数组元素的和。

编程要求

根据提示,在右侧编辑器补充代码。编写递归函数求数组从起始序号到结束序号之间数组元素的和。

测试说明

平台会对你编写的代码进行测试:

测试输入: 10 91 1 2 3 9 5 4 6 8 7 2 6

预期输出: 23

输入提示: 第一行表示数组元素的个数 第二行输入数组元素的值 第三行表示数组起始序号 第四行表示数组结束序号
输出提示: 数组从起始序号到结束序号之间数组元素的和

开始你的任务吧,祝你成功!

代码示例

#include <stdio.h>
#define N 20
int Fun(int a[],int start,int end);
int main()
{
    int a[N], sum;
    int i,n,s,e;
    //printf("输入整数个数:");
    scanf("%d",&n);  
    //printf("输入%d个整数:\n",n);
    for(i=0;i<n;i++)
    {
    	scanf("%d",&a[i]);
    }
    //printf("输入起始位数:");
    scanf("%d",&s);
    //printf("输入终止位数:");
    scanf("%d",&e);
    sum = Fun(a,s,e) ;
    printf("%d\n",sum);
    return 0;
}
/**********定义Fun()函数**********/ 
/********** Begin **********/ 
int Fun(int a[],int start,int end)
{
    if(start==end)
    return a[start];
    if(start<end)
    return 
    a[end]+Fun(a,start,end-1);
}

/********** End **********/

第4关:编写递归函数求数组元素的最大值

任务描述

本关任务:编写函数求一个数组中数组元素的最大值,要求必须用递归方法解决。

相关知识

可以根据数组下标来设置递归执行的调用以及终止条件。 要计算数组a从起始序号start到结束序号end之间数组元素的最大值: (1)如果数组a起始序号start等于结束序号end,那么返回值为此序号数组元素值a[start]。 (2)如果数组a起始序号start小于结束序号end,那么返回值为a[start]与数组a从start+1到end的之间最大值的最大值。

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

平台会对你编写的代码进行测试:

输入样例: 5 92 18 77 6 15

输出样例: 92

输入格式: 数组中的数字均为整型数,输入的第一个数为数组长度,后续为数组的所有元素。
输出格式: 该数组的最大值

开始你的任务吧,祝你成功!

代码示例

#include <stdio.h>
#define N 20 
int max(int a,int b);
int Func(int a[],int s,int e);
int main()
{
	int a[N], m;
	int i,n,s,e;
	//printf("输入整数个数:");
	scanf("%d",&n);  
	//printf("输入%d个整数:\n",n);
	for(i=0;i<n;i++)
 	{
 		scanf("%d",&a[i]);
 	}
	m = Func(a,0,n-1) ;
   printf("%d\n",m);
   return 0;
}
/**********定义Max()函数**********/ 
int max(int a,int b)
{
    /********** Begin **********/ 


    /********** End **********/
}
/**********定义Func()函数**********/ 
int Func(int a[],int s,int e)
{
    /********** Begin **********/ 
    if(s == e)
    return a[s];
    if(s < e)
    return a[e]>Func(a,s,e-1)?a[e]:Func(a,s,e-1);

    /********** End **********/
}

第5关:编写递归函数将所输入的整数以相反顺序打印

任务描述

本关任务编写递归函数将所输入的整数以相反顺序打印出来,整数为0时终止输入。

相关知识

递归函数也可以没有返回值,可以根据条件判断是否继续调用递归函数。

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

平台会对你编写的代码进行测试:

测试输入: 4 31 57 2 0 预期输出: 2 57 31 4


开始你的任务吧,祝你成功!

代码示例

#include <stdio.h>
#include <iostream>
using namespace std;
const int N = 100;
int a[N];
void reverse(int l);             //reverse函数的声明	
int  main()
{   
    int x, cnt = 0;
    cin >> x;
    a[cnt] = x;
    while (x) 
    {
        cin >> x;
        a[++ cnt] = x;
    }
    reverse(cnt);
    return 0;
}
/**********定义reverse ()函数**********/ 
void reverse(int l)
{
    /********** Begin **********/ 
    if (l == 0) return;
    cout << a[l - 1] << ' ';
    reverse(l - 1);
    /********** End **********/
}

第6关:编写递归函数将所输入的5个字符,以相反顺序打印

任务描述

本关任务:编写递归函数将所输入的5个字符,以相反顺序打印出来。

相关知识

本关任务与上关任务相比,要处理的数据类型从数值型变成了字符型。

编程要求

根据提示,在右侧编辑器补充代码。

测试说明

平台会对你编写的代码进行测试:

测试输入 abcde 预期输出: edcba


开始你的任务吧,祝你成功!

代码示例

#include <stdio.h>
void func(int n);
int  main()
{
    //printf("please input 5 numbers:");
    func(5);
    return 0;
}
/**********定义func ()函数**********/ 
void func(int n)
{
    char next;
	if(n<=1)
	{
		next=getchar();
		putchar(next);
	} 
	else
	{
		next=getchar();
		func(n-1);
		putchar(next);
	}
}

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

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

相关文章

论文笔记:SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS

ICLR 2017 1 abstract和intro部分 问题的setting 在图上进行节点分类&#xff0c;其中只有一部分节点有label ——>基于图的半监督学习传统的方法是使用平滑正则 其中L0表示图中有监督部分的lossf是神经网络&#xff0c;ΔD-A表示unnormalized的拉普拉斯矩阵 这种方…

Blender 物理属性 (五)动态绘画

文章目录动态绘画简介.以小船划过水面产生波纹为例.波浪属性.动态绘画简介. 1 动态绘画可以让一个物体在另一个物体上绘制东西 2 动态绘画至少需要两个物体&#xff0c;一个作为画布&#xff0c;另一个作为笔刷 3 两个物体必须接触才有效果 以小船划过水面产生波纹为例. 1 为…

【数据结构】浅识泛型

目录 1、包装类 1.1、基本数据类型和其包装类 1.2、装箱和拆箱 1.2.1、装箱 1.2.2、拆箱 1.2.3、面试题 2、泛型的概念 3、引出泛型 3.1、语法 4、泛型类的使用 4.1、语法 5、裸类型&#xff08;Raw Type&#xff09; 6、泛型是如何编译的 6.1、擦除机制 6.2、不…

Springboot+ssm371的在线考试系统maven idea

摘 要 I 1 绪论 1 1.1研究背景 1 1.2研究现状 1 1.3研究内容 2 2 系统关键技术 3 springboot是基于spring的快速开发框架, 相比于原生的spring而言, 它通过大量的java config来避免了大量的xml文件, 只需要简单的生成器便能生成一个可以运行的javaweb项目, 是…

DPO4104示波器

18320918653 DPO4104 详细说明&#xff1a; 美国泰克Tektronix DPO4104数字荧光示波器主要产品特色&#xff1a;Inspector智能存储管理2.串行触发和分析3.10.4”更大的显示器, 前面板上USB和CompactFlash端口, 及TekVPI?改善的探头接口, 更强的操作渐 变性商品名称 &#x…

针孔相机模型

针孔相机模型坐标系(1) 图像像素坐标系(2) 图像物理坐标系(3) 相机坐标系(4) 归一化平面坐标系(5) 世界坐标系畸变校正针孔相机模型中一般会涉及到图像像素坐标系、图像物理坐标系、相机坐标系、归一化平面坐标系和世界坐标系这5个坐标系。 坐标系 (1) 图像像素坐标系 图像像…

IDEA设置界面和控制台的滚动条颜色

前言 不知道大家是否和我一样有这么一个烦恼&#xff1a; IDEA自带的滚动条颜色很暗&#xff0c;配上一些主题颜色搭配很难发现。 所以今天就想着怎么可以修改滚动条颜色&#xff0c;首先去网上搜了搜都是什么鼠标滚轮加shift滚动&#xff0c;一点也不实用 偶然看到了个不错的…

图表控件LightningChart.NET 系列教程(七):LightningChart 组件——LightningChart.NET 函数库

LightningChart.NET SDK 是一款高性能数据可视化插件工具&#xff0c;由数据可视化软件组件和工具类组成&#xff0c;可支持基于 Windows 的用户界面框架&#xff08;Windows Presentation Foundation&#xff09;、Windows 通用应用平台&#xff08;Universal Windows Platfor…

匿名函数 lambda

匿名函数 lambda 匿名函数&#xff1a;一句话函数&#xff0c;比较简单的函数,没有函数名的函数 在Python中&#xff0c;lambda的语法是唯一的 lamlambda a,b:ab lamlam(a1,b2) # 传参 print(lam) # 3lmbda的语法是唯一的。其形式如下&#xff1a;lambda argument_list: expr…

python图像处理(prewitt算子)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面几章谈到了灰化、增强、旋转、滤波等内容,今天来谈一谈边缘检测。边缘检测是图像处理的重要内容。很多图像分割、图像识别的前一步就是边缘检测。某种意义上说,边缘检测的好坏…

7-查看和处理文件内容

7-查看和处理文件内容 文本文件 ASCII、UTF-8、Unicode、ANSItxt、xml、conf、properties、yml等配置文件、日志文件、源代码 二进制文件 可执行文件、图片、音频、视频 cat 全拼&#xff1a;concatenate [kənˈkt(ə)nˌeɪt] 连接 格式&#xff1a;cat 文件名 more/…

2. Spring 注解开发

文章目录1. 用注解开发定义bean2. 纯注解开发3. 注解开发的 bean 管理3.1 作用范围管理&#xff08;单例或非单例&#xff09;3.2 生命周期管理4. 注解开发的依赖注入4.1 引用类型的依赖注入4.2 简单类型的依赖注入4.2.1 直接注入值4.2.2 注入 properties 文件中的值5. 注解开发…

Acwing---1101. 献给阿尔吉侬的花束

献给阿尔吉侬的花束1.题目2.基本思想3.代码实现1.题目 阿尔吉侬是一只聪明又慵懒的小白鼠&#xff0c;它最擅长的就是走各种各样的迷宫。 今天它要挑战一个非常大的迷宫&#xff0c;研究员们为了鼓励阿尔吉侬尽快到达终点&#xff0c;就在终点放了一块阿尔吉侬最喜欢的奶酪。…

MYSQL不存在插入 存在更新的解决方法和对比

设置主键id自增&#xff0c;name为唯一索引 一、避免重复插入 insert ignore into&#xff08;有唯一索引&#xff09; 关键字/句: insert ignore into&#xff0c;如果插入的数据会导致 UNIQUE索引 或 PRIMARY KEY 发生冲突/重复&#xff0c;则忽略此次操作/不插入数据&…

Leetcode.1664 生成平衡数组的方案数

题目链接 Leetcode.1664 生成平衡数组的方案数 题目描述 给你一个整数数组 nums。你需要选择 恰好 一个下标&#xff08;下标从 0 开始&#xff09;并删除对应的元素。请注意剩下元素的下标可能会因为删除操作而发生改变。 比方说&#xff0c;如果 nums[6,1,7,4,1]nums [6,1…

spark转化操作

文章目录转化操作Transformer算子概念单RDD转换函数多RDD转换函数map与flatmap转化操作 由于spark的惰性计算特性&#xff0c;RDD只有在第一次行动操作中被用到时才会真正进行计算&#xff0c;因此我打算将文章内容分为"转化操作"和"行动操作"两部分&…

【web】微信小程序笔记小结(视图与逻辑)

过完年回来干正事了orz 来源&#xff1a;黑马程序员前端微信小程序开发教程 目录 I. 页面导航 ① 概念 ② 导航方式 1&#xff09;声明式导航 ※※ 导航到 tabBar 页面 ※※ 导航到非 tabBar 页面 ※※ 后退导航 2&#xff09;编程式导航 ※※ 导航到 tabBar 页面…

Nature立新规:ChatGPT等大模型不可以成为作者

众所周知&#xff0c;AI 的超参数决定着模型学习效果和速度。相比普通机器学习任务&#xff0c;深度学习需要的训练时间较长&#xff0c;因此调参技巧就显得尤为重要。 但鉴于深度学习「炼丹」的特性&#xff0c;不同的模型需要不同的超参数&#xff0c;而每个超参的意义又不同…

【头歌】汉诺塔(Hanoi)的递归算法

任务描述本关任务&#xff1a;汉诺塔(Hanoi)的递归算法。相关知识相传在古印度圣庙中&#xff0c;有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上&#xff0c;有三根杆(编号A、B、C)&#xff0c;在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标&a…

C语言中数组变量作为函数参数传值的两种方式:数组类型 指针类型 以及“C语言中数组变量(名)的本质是指针变量”

文章目录Intro & SummaryCode & Output运行截图Code关于数组长度在被调函数中的计算错误运行截图 & 警告信息Code数组变量是一类特殊的、指向自己的指针变量Intro & Summary 我在 main 函数中定义了一个数组&#xff0c;要将该数组作为参数传递给其他方法。那…