`
superwulei
  • 浏览: 108572 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

几个递归练习

 
阅读更多

1.反向输出字符串

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1 void  stringReverse(  char  array[] )
2 {
3      if  ( array[ 0 ==   ' \0 '  )
4          return ;
5     stringReverse( array  +   1  );
6     printf(  " %c " , array[ 0 ] );
7 }


2.输出数组

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->1 void  printArray(  int  array[],  int  size )
2 {
3      if ( size  ==   0  )
4          return ;
5     printf(  " %d  " , array[ 0 ] );
6     printArray(  ++ array,  -- size );
7 }


3.查找数组中的最小值

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 int  recursiveMinimum(  int  array[],  int  size )
 2 {
 3      if  ( size  ==   1  )
 4          return  array[ 0 ];
 5
 6      if  ( array[ size  -   1  ]  <  recursiveMinimum( array, size - 1  ) )
 7          return  array[ size  -   1  ];
 8      else
 9          return  recursiveMinimum( array, size - 1  );
10 }


4.选择排序
选择排序:从数组中查找最小的值,将其同数组中的第一个元素交换,然后从第二个元素开始查找最小的值同数组第二个元素交换,这样重复一直到只剩最后一个元素为止。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 void  selectionSort(  int  list[],  int  n,  int  start)
 2 {
 3      {   
 4          int  i;   
 5          int  p  =  start;   
 6          if  ( start  <  n  -   1  )   
 7          {       
 8              for  ( i  =  start; i  <  n; i ++  )   
 9              {
10                  if  ( list[i]  <  list[p] )   
11                     p  =  i;  
12             }

13             i  =  list[ p ];   
14             list [ p ]  =  list[ start ];   
15             list[ start ]  =  i;   
16             selectionSort( list , n , start + 1  );   
17         }
   
18     }
   
19 }

5.线性查找

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 int  linerSearch( int  a[],  int  key,  int  size)
 2 {  
 3      if  ( size  >   0  )  
 4      {  
 5          if  ( a[ size  -   1  ]  ==  key )
 6              return   size  -   1 // 反方向,返回下标  
 7          return  linerSearch( a, key, size  -   1  );  
 8     }
    
 9     
10      return   - 1 // 未找到  
11 }
 
分享到:
评论

相关推荐

    求解这几个问题,几个递归算法中的问题,挺有意思的。

    在编程和算法设计中,递归是一种强大的工具,它通过函数自身调用来...通过练习典型问题,如阶乘计算、汉诺塔、斐波那契数列等,可以帮助加深对递归的理解。同时,借助调试工具和伪代码,可以更好地跟踪和理解递归过程。

    第4.2讲-递归练习题1

    在本节中,我们将探讨与递归相关的编程概念,通过几个具体的练习题来理解递归函数的工作原理及其应用。递归是一种在函数内部调用自身的技术,通常用于解决需要重复执行相同操作的问题,如计算阶乘或遍历树形结构。 ...

    java 递归问题文档

    在Java中,递归的使用需要注意以下几点: 1. **堆栈溢出**:由于每次函数调用都会在内存堆栈中分配空间,过多的递归调用可能导致堆栈溢出错误。因此,确保递归深度在合理范围内是很重要的。 2. **效率**:递归虽然...

    C语言入门的几个简单练习

    C语言入门的几个简单练习(输出1-1000质数,九九乘法表,输出*金字塔,给出年、月、日,计算该日是该年的第几天,用递归方法就n阶勒让德多项式的值等),适合C语言入门的新手进行练习。

    实现简单的递归,用C++编写的

    对于`factorial(n)`(n&gt;0),我们将其分解为`n * factorial(n-1)`,这是一个递归调用。当n不断减小,最终会到达基础情况,递归调用停止。 然而,递归并非总是高效的方法,因为它涉及到多次函数调用,可能会消耗大量...

    扫雷小游戏 适合初学者 主要练习递归

    扫雷游戏的逻辑主要包括以下几个部分: - **初始化雷区**:随机生成雷的位置,并创建一个二维数组表示游戏地图。 - **用户交互**:接收用户输入的坐标,并检查该位置是否有雷或者已经标记。 - **递归检查**:当...

    经典算法之递归

    1. **终止条件**:每个递归函数都必须有一个明确的终止条件,否则会导致无限递归,最终导致程序崩溃。 2. **问题分解**:正确地将大问题分解为小问题,确保每次递归调用都在向基本情况靠近。 3. **重叠子问题**:在...

    西南交通大学数据结构实验报告黑白棋.doxc递归算法设计及堆栈消除递归

    对于黑白棋子交换,代码应该包含一个主函数来初始化棋盘状态,以及一个递归函数来处理棋子的移动。对于堆栈消除递归,需要将递归函数`f(m)`改写为循环结构,使用栈来保存中间状态。全排列的问题,需要将`perm`函数的...

    recursion:递归练习

    这个名为"recursion:递归练习"的项目显然旨在深入理解和应用递归原理,特别是通过JavaScript语言来实现。JavaScript,作为一种广泛使用的脚本语言,不仅在网页开发中起到关键作用,还支持各种算法和数据结构的实现,...

    一个关于汉诺塔的非递归算法

    在C++中实现汉诺塔的非递归算法,主要步骤包括以下几个部分: 1. **初始化**:定义三个栈,分别对应于三根柱子A、B、C。在开始时,所有盘子都在栈A中。 2. **移动盘子**:根据汉诺塔的规则,我们需要将栈A中的所有...

    冒泡排序和递归求和实现

    在计算求和问题中,递归通常涉及到将总和分为两个部分:一部分是第一个数字,另一部分是剩余数字的总和。递归求和的基线条件通常是当序列为空或只有一个元素时,总和就是该元素的值。在Java中,可以使用递归函数来...

    递归回溯深度优先搜索DFS练习题(含C++源码)

    本压缩包提供了几个基于DFS的C++编程练习题,让我们逐一解析这些题目并探讨其背后的DFS应用。 1. **《过河卒》**:这通常是一个棋盘问题,可能涉及到如何通过移动棋子(如卒)从棋盘的一端到达另一端,其中可能存在...

    迷宫游戏C++数据结构递归算法实现

    代码可能分为几部分:迷宫的初始化和表示,深度优先搜索的递归函数,以及用户交互逻辑。阅读和理解这些代码可以帮助深入学习C++编程和算法应用。 总的来说,这个项目是学习和实践数据结构与算法的好例子,它涉及到...

    turtle-递归美学-分形树-draw_branch.rar

    递归的美妙之处在于,即使只用几个简单的规则,也能生成复杂且具有视觉吸引力的图形,这正是分形几何的魅力所在。 总之,`turtle`库结合递归函数为我们在Python中提供了探索分形艺术的途径。通过理解递归原理和`...

    dgsf.zip_C++_递归

    在使用递归时,需要注意几个关键点: - **终止条件**:必须明确定义递归何时停止,否则会导致无限递归。 - **效率**:递归可能会导致大量的函数调用,消耗较大的内存和时间。对于大规模数据,迭代通常比递归更高效...

    易语言二进制递归运算

    在易语言中,进行二进制递归运算可能包括以下几个关键步骤: 1. **二进制转换**:将十进制数或其他形式的数据转换为二进制表示。这可以通过除以2并取余的方式来实现,每次除法后将余数添加到二进制数的前面,直到...

    C/C++递归技术详解

    2. **效率问题**:虽然递归简洁优雅,但过多的递归调用可能导致栈溢出,因为每个递归调用都会占用栈空间。考虑使用循环或其他非递归方法优化性能。 3. **理解调用堆栈**:理解递归如何在调用堆栈上展开有助于调试和...

    4.5递归算法与递归程序[汇编].pdf

    12. **课堂活动**:通过解决不同形式但使用相同递归方法的问题,帮助学生深化对递归算法的理解,例如练习(2)和练习(3)。 13. **汉诺塔问题**:这是一个经典的递归问题,通过移动盘子来展示递归的思想,即把大问题...

    c语言分治法求众数重数-五大常见算法策略之——递归与分治策略,算法数据结构

    在C语言中,我们可以定义一个递归函数来计算第n个Fibonacci数: ```c int fibonacci(int n) { if (n ) return n; else return fibonacci(n - 1) + fibonacci(n - 2); } ``` 接下来,阶乘的计算同样可以用递归来...

    javascript-leetcode面试题解递归与回溯问题之第59题递归矩阵-题解.zip

    在使用递归和回溯解决矩阵问题时,有几个关键点需要注意: 1. 边界条件:确保递归函数在达到矩阵边缘或无效状态时停止。 2. 回溯策略:正确地回溯到上一步,以尝试其他可能的路径。 3. 状态记录:保存当前路径或...

Global site tag (gtag.js) - Google Analytics