数据结构算法C语言实现(十)--- 3.3栈与递归的实现

时间:2023-03-08 18:25:12
数据结构算法C语言实现(十)--- 3.3栈与递归的实现

  一.简介

  汉诺塔问题是递归的一个典型例子,而且书上的讲解很详细,对理解C语言函数及函数传参的工作机制很有帮助,值得一看。而且,递归在我看来和分治、DP、贪心等一样是十分优美的思想,值得学习!!!

  二.CPP文件

 //3_3.cpp
/**
author:zhaoyu
email:zhaoyu1995.com@gmail.com
date:2016-6-8
note:realize my textbook <<数据结构(C语言版)>>
*/
//Page 54
#include <cstdio>
int cnt = ;
void move(char a, int n, char b)
{
printf("%i\tmove disk %d from %c to %c\n", ++cnt, n, a, b);
}
void hanoi(int n, char x, char y, char z)
{
if ( == n)
{
move(x, , z);
}
else
{
hanoi(n-, x, z, y);
move(x, n, z);
hanoi(n-, y, x, z);
}
}
int main(int argc, char const *argv[])
{
int n;
scanf("%d", &n);
hanoi(n, 'X', 'Y', 'Z');
return ;
}

3_3.cpp

  三.测试

  三个:

  数据结构算法C语言实现(十)--- 3.3栈与递归的实现

  五个:

  数据结构算法C语言实现(十)--- 3.3栈与递归的实现

  容易看出,移动 n 个,需要 2^n - 1次。