两个递归程序(数组最大元素,汉诺塔)

1、递归返回数组中最大元素

//返回数组中最大元素
int findMax(int a[], int n)
{
    int next = 0;
    if (n == 1) return a[0];
    next = findMax(&a[1], n-1);
    return a[0]>next ? a[0] : next;
}

2、汉诺塔

/*
汉诺塔:把盘子从A驻移动到C柱,大盘子时刻不能在小盘子之上
输入:n(盘子数目)
输出:步骤
*/
int hanoid(char A, char B, char C, int n)
{
    if (n == 0) return 0;
    if (n == 1)
    {
        printf("Move #%d from %c to %c\n", n, A, C);
        return 0;
    }
    else
    {
        hanoid(A, C, B, n-1);
        //hanoid(A, B, C, 1);
        printf("Move #%d from %c to %c\n", n, A, C);
        hanoid(B, A, C, n-1, step+2);
    }
    return 0;
}
时间: 2024-08-06 20:02:08

两个递归程序(数组最大元素,汉诺塔)的相关文章

Java学习(3):递归问题(举例:汉诺塔问题)。

递归问题是编写程序中常见的问题之一.此随笔对具有明显递归的汉诺塔问题进行说明. 1 import java.util.Scanner; 2 3 /** 4 * 递归:汉诺塔 5 * 6 * @author xcx 7 * @time 2017年7月3日上午8:16:07 8 */ 9 public class Hanoi { 10 private static int i = 0; 11 12 public static void main(String[] args) { 13 int n =

Ka的递归编程练习 Part4|Hanoi汉诺塔,双色汉诺塔的也有

1 #include <stdio.h> 2 void hanoi(int s,char a,char b,char c) //a是出发盘,b是中途盘,c是结束盘 3 { 4 if(s==0) return; 5 hanoi(s-1,a,c,b); //把最底下的从a借助c移动到b 6 printf("s from %c move to %c\n",a,c); 7 hanoi(s-1,b,a,c); //把刚才弄到b的借助a叠到c上 8 } 9 int main() 10

2.6 递归与分治策略(汉诺塔问题)

汉诺塔问题是一个经典问题. 题意理解:有A,B,C三个柱子,将A柱子上的N个盘子(从小到大排列)移到C柱子上,每次只允许移动一个盘子,并且保证每个柱子上的盘子的排列都是从小到大. 分析:由题意可知,如果要将A上的盘子移动到C,那么肯定需要借助C. 首先将A上的盘子从上到下依次编号为1-n. 运用整体思想: 1.假设1到n-1个盘子是一个整体 2.将1到n-1个盘子构成的整体移动到B 3.将第n个盘子移动到C 4.再将第2步移动到B的整体移动到C就可以了. 重复以上过程,显然这是一个递归的过程.下

用C语言实现汉诺塔自动递归演示程序

用C语言实现汉诺塔自动递归演示程序 程序实现效果 1.变界面大小依照输入递归数改变. 2.汉诺塔自动移动演示. 3.采用gotoxy实现流畅刷新. 4.保留文字显示递归流程 程序展示及实现 github地址:https://github.com/404name/C-game 0.主体思路 输入要递归的汉诺塔数目,在原来的汉诺塔基础上新增move_play函数展示递归,用next数组存储每种移动状态.对应的从哪到哪可自动对应相应的移动方式自动移动. 1.变界面大小依照输入递归数改变 init函数按

C#中汉诺塔问题的递归解法

百度测试部2015年10月份的面试题之——汉诺塔. 汉诺塔就是将一摞盘子从一个塔转移到另一个塔的游戏,中间有一个用来过度盘子的辅助塔. 百度百科在此. 游戏试玩在此. 用递归的思想解决汉诺塔问题就是分为两种情况: 第一种情况是只有一个盘子的情况,也就是最基本的情况,这种情况下,直接将该盘子从原始塔转移到目标塔即可胜利: 第二种情况是右n个盘子的情况,也就是普遍情况,这种情况下,要将除了最底下的那个盘子以外的(n-1)个盘子从原始塔转移到辅助塔,再把最底下的那个盘子(第n个盘子)从原始塔转移到目标

由汉诺塔引起的对递归的思考

对递归的理解在于放弃,放弃对于全程的理解与跟踪,只理解递归两层之间相互的联系,以及递归终结的条件. 汉诺塔永远只有两层,最底层和上层,上层放到中间,底层放好,再把中间的放到底层上面!!! 就这样,在乱想自杀! 原文地址:https://www.cnblogs.com/rrrrrchar/p/9190618.html

汉诺塔-递归

有三根柱子A,B,C A柱子上穿着N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要将所有圆盘移至C柱子,遵循以下规则: 1. 每次只能移动一个圆盘: 2. 小的上面不能放大的. 拆解问题,N个盘子,把最下面的那个大的看做地面,看成不存在,问题变为N-1汉诺塔问题 把下面两层看做不存在,就是N-2.... 方法就是: 先移动一个盘子(解决1汉诺塔问题) 在此基础上,解决2汉诺塔问题 .... .... 解决N-1汉诺塔问题 最终解决N汉诺塔问题 当然,递归是倒过来的,虽然思维是倒过来的,但实际

汉诺塔之递归学习

汉诺塔问题: 问题描述引自:http://www.cnblogs.com/antineutrino/p/3334540.html 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘. 思维导图: 程序代码: 1 #

Bailian4147 汉诺塔问题(Hanoi)

4147:汉诺塔问题(Hanoi) 总时间限制: 1000ms 内存限制: 65535kB 描述 一.汉诺塔问题 有三根杆子A,B,C.A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘: 大盘不能叠在小盘上面. 提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则. 问:如何移?最少要移动多少次? 汉诺塔示意图如下: 三个盘的移动: 二.故事由来 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传

HDU1996 汉诺塔VI

问题链接:HDU1996 汉诺塔VI.水题,用C语言编写程序. 本题实际上是计算3^n.编程中需要注意输出格式. AC的C语言程序如下: /* HDU1996 汉诺塔VI */ #include<stdio.h> #include<math.h> int main (void) { int t, n; scanf("%d",&t); while(t--) { scanf("%d", &n); printf("%.lf