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

本文介绍了递归在解决实际问题中的应用,包括汉诺塔问题的解决方案,走台阶的不同走法计算,以及字符串的逆序操作。通过递归函数实现,如hanoi()用于汉诺塔,fib()用于计算走台阶的方案数,以及reverse()用于字符串逆序。递归思想在这些经典问题中展现出强大的解决问题的能力。

目录

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--->%c\n",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<stdio.h>
#include<string.h>
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<stdio.h>
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;
}

共性:

 

评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值