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

C语言基础(二)_递归(recursion)

阅读更多

1.递归三要素

一个问题采用递归方法来解决,必须符合三个条件。

(1)可以把这个问题转化为一个新的问题,而这个新问题的解决方法与原问题的方法相同,只是处理的对象不同,但它们也只是有规律的递增或递减。

(2)可以通过转化过程使问题得以解决。

(3)必须有个终止递归的条件。

2.Hanoi(汉诺塔问题)

n个盘子,A,B,C三根针,要求借助B,将A针上的n个盘子移动到C上,n个盘子大小不等,且大的在下,小的在上。

解决的步骤可以分为两类操作:

(1)将n-1个盘子从一个针移动到另一个针上(n>1)。

(2)将一个盘子从一个针移动到另一个针上。

 

 

#include <stdio.h>

void move(char source,char target)
{
	printf("%c->%c\n",source,target);
}

void hanoi(int n,char one,char two,char three)
{
	if(n==1)
		move(one,three);
	else
	{
		hanoi(n-1,one,three,two);
		move(one,three);
		hanoi(n-1,two,one,three);
	}
}

void main()
{
	int n;
	printf("请输入正整数n:");
	scanf("%d",&n);
	hanoi(n,'A','B','C');
}

 

分享到:
评论

相关推荐

    polish-notation-recursion.c

    波兰表达式c语言递归 polish_notation_recursion polish_notation_recursion polish_notation_recursion polish_notation_recursion

    C语言的一个递归列子

    recursion递归的一个案列,一切为了积分,不知道是不是这样就可以得到积分,所以试试

    c实现消除文法左递归

    C语言实现消除文法左递归 消除文法左递归是编译原理中的一种重要技术,旨在消除文法中的左递归,避免语法分析中的问题。本文将介绍使用C语言实现消除文法左递归的方法。 消除文法左递归的重要性 在编译原理中,...

    数据结构C语言代码示例,有详细注释

    递归 2_Recursion.c 栈 3_Stack.c 汉诺塔 4_Hanoi.c 二叉树 5_BinaryTree.c 最小堆 6_MinHeap.c 哈夫曼树 7_HuffmanTree.c 邻接矩阵 8_AdjacencyMatrix.c 邻接表 9_AdjacencyList.c 十字链表 0_...

    C语言第七章-递归完整版资料.ppt

    本资源提供了C语言递归的完整版资料,包括递归的定义、分类、实现方法、递归函数的写法和递归问题的求解等内容,是C语言学习者的不二之选。 知识点: 1. 递归的定义和分类 2. 递归函数的写法和实现方法 3. 递归...

    C语言的逻辑双璧:递归与循环深度解析

    ##### 递归(Recursion) 递归是一种编程技巧,通过函数调用自身来解决问题。递归的核心在于能够将一个复杂的问题分解为一系列相似但规模较小的子问题,最终通过解决这些子问题来解决原始问题。递归通常包含两个...

    学习c语言你该知道的单词

    - **递归(Recursion)**:递归是一种函数调用自身的技术,用于解决可以分解为相同类型子问题的问题。 以上仅是C语言学习中部分关键知识点的概述,实际上,C语言的学习过程涵盖了广泛的概念和技术。深入理解和掌握...

    c语言第二版 英文的

    - **递归** (4.10 Recursion):解释递归函数的工作原理与编写技巧。 - **C预处理器** (4.11 The C Preprocessor): - **文件包含** (4.11.1 File Inclusion):介绍如何使用#include指令引入其他文件。 - **宏替换*...

    递归实现字符串反向输出

    本文将通过一个具体的例子——使用C语言实现字符串的反向输出,来深入理解递归的基本概念及其应用。 #### 一、递归基础 递归(Recursion)是指在一个函数的定义或执行过程中直接或间接地调用自身的一种方法。递归...

    全国计算机等级考试二级C语言公共基础知识点汇总六.pdf

    根据提供的文件内容,以下为全国计算机等级考试二级C语言公共基础的知识点汇总。 1. 数据结构基础 - 栈(Stack):后进先出(LIFO)数据结构,典型的操作包括压栈(Push)和出栈(Pop)。 - 队列(Queue):先进...

    OMP算法的C语言代码

    7. **并行递归(Parallel Recursion):** OpenMP支持并行递归,但需要注意递归深度可能导致大量线程创建,可能对性能产生负面影响。 8. **OpenMP运行时库(OpenMP Runtime Library):** 提供了一系列函数,如`omp...

    编译原理课程设计_四则混合运算_C语言

    在本项目“编译原理课程设计_四则混合运算_C语言”中,我们将探讨如何运用编译原理的基本概念,特别是SLR(简单左递归)文法和尾动作文法,来实现C语言中的四则混合运算。这个设计任务旨在帮助学生深入理解编译器的...

    C语言递归算法程序.rar-综合文档

    综上所述,“C语言递归算法程序.rar”中的文档很可能涵盖了递归的基础概念、实例、优缺点、实现方法以及如何避免常见的递归陷阱。对于想要深入学习C语言和算法的人来说,这是一个非常有价值的资源。通过学习和实践...

    武汉理工大学C语言经典实例

    4. "Recursion.c" - 实现递归函数,如计算阶乘、斐波那契数列等。 5. "Structures.c" - 使用结构体存储和操作复杂数据类型。 6. "FileHandling.c" - 文件的打开、读写、关闭操作,以及文件流的使用。 7. ...

    云顶书院C语言学习代码.zip

    ”的简单程序)、"array_operations.c"(演示数组操作)、"recursion.c"(展示递归函数)等文件。这些文件通常会覆盖不同的C语言知识点,通过它们,学习者可以逐步深入学习和理解C语言的各个方面。 总结来说,"云顶...

    C语言实现快速排序.rar

    3. **递归排序(Recursion)**:对基准左右两边的子序列分别重复上述步骤,直到所有元素都有序。快速排序的递归深度取决于数组的初始分布,最好情况下为O(log n),最坏情况下为O(n log n),平均时间复杂度也是O(n ...

    Higher Computing

    递归(Recursion)是指一个函数直接或间接地调用自身的过程。这种调用方式使得程序能够通过重复调用自身来解决复杂问题,通常适用于可以分解为相似子问题的情形。递归是计算机科学中一种强大的工具,能够简化许多...

    C 递归

    C 递归 递归指的是在函数的定义中使用函数自身的方法。 举个例子: 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?”从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事...

    输出一个字符串的所有排列

    在编程领域,字符串排列是一个经典的算法问题,主要涉及到字符串处理和递归技术。字符串的所有排列是指将一个字符...在压缩包文件`string_arrange_recursion`中,可能包含了实现这个算法的源代码,供学习者参考和实践。

Global site tag (gtag.js) - Google Analytics