栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

递归经典例题及思考:汉诺塔,走台阶,逆序,实现逆序打印|C语言详解

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

递归经典例题及思考:汉诺塔,走台阶,逆序,实现逆序打印|C语言详解

目录

1.汉诺塔

2.走台阶

3.字符串逆序

 4.递归实现逆序打印等


1.汉诺塔

如果数量大于一,可以分为三个步骤。

以8为例:

 

第一步是把1-7运到B柱。(c1-> A,c2-->B,c3--->C)注意目的地

第二步把8放到c柱。

第三步把1-7移动到c柱。

 

void hanoi(int n, char c1, char c2, char c3)
{
	if (n > 1)
		hanoi(n - 1, c1, c3, c2);
	printf("move:  %d  %c--->%cn",n,c1,c3);
	if (n > 1)
		hanoi(n - 1, c2, c1, c3);
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	hanoi(n, 'A', 'B', 'C');
	return 0;
}

2.走台阶

问题描述:假设有n个台阶,每跨一步只能上1阶或者2阶台阶。求总共有多少种走法

设n阶台阶有f(n)种走法,那么最后一步只能是1阶或者2阶两种情况,f(n) = 1*f(n - 1) +1* f(n - 2)。

int fib(int n)
{
    if(n<=2)
        return n;
    else
        return fib(n-1)+fib(n-2);
}

3.字符串逆序
#include
#include
void reverse(char a[])
{
	int len=strlen(a);
	char* end = a + len - 1;
	char tmp = *a;
	*a = *end;
	if (len > 3)
	{
		*end = 0;
		reverse(a + 1);
	}
	*end = tmp;
}
int main()
{
	char a[20] = "";
	gets(a);
	reverse(a);
	printf("%s", a);
	return 0;
}

共性:

 4.递归实现逆序打印等

例:实现函数将十进制转化为六进制(需要取模后逆序打印)

1.数组存储再逆序打印

2.递归

#include
void six(int n)
{
    if(n>=6)   
    {
        six(n/6); 
    }
    printf("%d",n%6);
}
int main()
{
    int n=0;
    scanf("%d",&n);
    six(n);
    return 0;
}

共性:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1038785.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号