递归10小题

server/2024/9/23 4:11:08/

注:操作数字的数组均为int [ ]型,操作字符串均为char [ ]型
下面的10个问题很常见,在这里都是用递归解决的。涉及到数组的问题,需要有指针的知识。

1.求1到n的和

int getSum(int n)//求1到n的和
{if(n==1){return 1;}return n+getSum(n-1);	
}

2.遍历数组

void traverseArray(int * array,int length)
{if(length==1)//length是数组的长度,用来控制递归的深度以及结束递归{cout<<*array<<endl;//用length==1结束递归,只是为了遍历数组尾元素时不带逗号,美观一点return;}cout<<*array<<",";//依次遍历数组中的每个元素traverseArray(array+1,length-1);//
}

3.为数组的每个元素赋值

void inputForArray(int * array,int length)//给出数组首地址和数组长度
{if(length==0){return;}cin>>*array;inputForArray(array+1,length-1);
}

4.逆序遍历数组

例:数组[10,3,9,26,93,94]
输出:94,93,26,9,3,10


void traverseReversely(int * array,int length)
{if(length==1){cout<<array[length-1]<<endl;;return;}cout<<array[length-1]<<",";traverseReversely(array,length-1);		
}

5.颠倒数组中的元素

例:
原数组 [10,3,9,26,93,94]
颠倒后的数组 [94,93,26,9,3,10]

void reverse(int * array,int length)
{if(length==0 || length==1){return;}int temporary=array[0];array[0]=array[length-1];array[length-1]=temporary;reverse(array+1,length-2);
}

也可以是这样的递归

void reverse(int * array,int length)
{if(length==0 || length==1){return;}reverse(array+1,length-2);int temporary=array[0];array[0]=array[length-1];array[length-1]=temporary;
}

6.求出数组中的最大值

int getMaximum(int * array,int length)
{if(length==1){return *array;}int maximum;//避免二次调用getMaximum函数maximum=*array>(maximum=getMaximum(array+1,length-1))?*array:maximum;return maximum;
}

7.输入一个整数n(n>0),将其逆序输出

例:n=12345,输出为54321

void reveal(long number)
{if(number<=9)//当number变成一位数时,即刻输出number,结束递归{cout<<number<<endl;return;}cout<<number%10;//不断对10取余,输出个位数reveal(number/10);
}

8.字符串翻转

例:
输入 “IAmIronMan”
输出 “naMnorImAI”

void traverseStringReversely0(char * source)
{if(!*source)//if(!*source)、if(*source=='\0')、if(*source==0)三者意思相同{return;}traverseStringReversely0(source+1);cout<<*source;
}void traverseStringReversely(char * source)//在主程序中调用它
{traverseStringReversely0(source);//递归函数中缺少换行cout<<endl;//在这个函数中单独加上
}

9.任意输入一个整数n(n>0),将其输出为二进制形式

输入:6
输出:110

void transform(int number)
{if(number==0){return;}transform(number/2);cout<<number%2;
}

10.求100到999之间的水仙花数


int isDaffodilNumber(int number)	//number>=100 且 number<1000 判断number是不是水仙花数
{if(number>9){int one=number%10;one=one*one*one+isDaffodilNumber(number/10);return one;//返回各个位立方之后的和,若和与number相等,则为水仙花数,否则非水仙花数}else{return number*number*number;}}//主函数中调用getDaffodilNumber
void getDaffodilNumber(int begin,int end) //begin>=100,end>=100,begin>end
{										//给定三位数的范围,begin最小为100,end最大为1000if(begin>end){return;			}if(isDaffodilNumber(begin)==begin){cout<<begin<<endl;}getDaffodilNumber(begin+1,end);
}

http://www.ppmy.cn/server/118258.html

相关文章

富格林:整理可信技巧应对虚假

富格林指出&#xff0c;投资者进入黄金市场的第一课&#xff0c;应该是学会利用可信的技巧应对市场的交易风险&#xff0c;避免虚假猫腻的捣乱。黄金市场瞬息万变&#xff0c;虽然有交易操作的就会&#xff0c;但也伴随着一定的风险。投资者对于应对预防虚假的措施需求还是比较…

图数据库的力量:深入理解与应用 Neo4j

图数据库的力量&#xff1a;深入理解与应用 Neo4j 文章目录 图数据库的力量&#xff1a;深入理解与应用 Neo4j1、什么是 Neo4j&#xff1f;版本说明 2、Neo4j 的部署和安装Neo4j Web 工具介绍 3、体验 Neo4j加载数据查询数据数据结构 4、Cypher 入门创建数据查询数据关系深度查…

跨界融合:EasyDSS+无人机视频直播推流技术助力行业多场景应用

随着科技的飞速发展&#xff0c;无人机技术与流媒体技术的结合正逐步改变着多个行业的运作模式。其中&#xff0c;EasyDSS互联网视频云服务与无人机视频直播推流技术的结合&#xff0c;更是为警务安防、赛事直播、农业监测等多个领域带来了前所未有的变革。本文将深入探讨EasyD…

【Python】高效图像处理库:pyvips

月亮慢慢变圆&#xff0c;日子慢慢变甜。 在图像处理领域&#xff0c;pyvips 是一个轻量级且高效的库&#xff0c;适合处理大规模图像、实现高性能的操作。相较于其他常见的图像处理库如 PIL 或 OpenCV&#xff0c;pyvips 以其低内存占用和出色的速度脱颖而出。本文将介绍 pyv…

CefSharp_Vue交互(Element UI)_WinFormWeb应用(2)---置顶和取消置顶(含示例代码)

一、预览 获取winform的置顶参数,和设置置顶参数 1.1 置顶(默认不置顶) 1.2 示例代码

力扣100题——贪心算法

概述 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在解决问题时&#xff0c;按照某种标准在每一步都选择当前最优解&#xff08;局部最优解&#xff09;的算法。它期望通过一系列局部最优解的选择&#xff0c;最终能够得到全局最优解。 贪心算法的核心思想 贪心算…

RabbitMQ(高阶使用)死信队列

文章内容是学习过程中的知识总结&#xff0c;如有纰漏&#xff0c;欢迎指正 文章目录 一、什么是死信队列&#xff1f; 二、死信队列使用场景 三、死信队列如何使用 四、打车超时处理 1.打车超时实现 以下是本篇文章正文内容 一、什么是死信队列&#xff1f; 先从概念解释上搞…

如何在uni-app中使用原子化 CSS——UnoCSS

原文地址&#xff1a;原文链接 一、前言 UnoCSS是一个即时的原子化 CSS 引擎&#xff0c;旨在灵活和可扩展。核心是不拘一格的&#xff0c;所有的 CSS 工具类都是通过预设提供的。 那么&#xff0c;UnoCSS 与其他框架的有何不同之处呢&#xff1f; UnoCSS 由 Windi CSS 团队…