递归经典例题及思考:汉诺塔,走台阶,逆序,实现逆序打印|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--->%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;
}

共性:

 

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值