【递归】例题分析

(1)


这么简单的题目,当时没做出来,真是懊恼!!!

其实就是走台阶问题的简单变形!

解答:

n=1,2时,f(n)=1;

n=3时,f(n)=2;

n>3时,f(n)=f(n-1)+f(n-3);


#include<stdio.h>

int shuaqi(int n)
{
	if(n==1||n==2) return 1;
	if(n==3) return 2;
	if(n>3) return shuaqi(n-1)+shuaqi(n-3);
}

void main()
{
	int n;//道路长度
	printf("请输入道路长度:");
	scanf(" %d",&n);
	printf("共有%d种刷漆方式!\n",shuaqi(n));
}

(2)

给定字符串,输出括号是否匹配,例如,
"()" yes;
")(" no;
"(abcd(e)" no;
"(a)(b)" yes。
要求必须用递归写,整个实现不可以出现一个循环语句。

#include<stdio.h>

void kuohao(char *str,int count)
{
	if(*str=='\0')
	{
		if(count==0) printf("yes\n");
		else printf("no\n");
		return;
	}
	else
	{
		switch(*str)
		{
		case '(': 
			count++;
			str++;
			return kuohao(str,count);
			//break;
		case ')':
			count--;
			if(count<0)
			{
				printf("no\n");
				return;
			}
			else
			{
				str++;
				return kuohao(str,count);
			}
			//break;
		default:
			str++;
			return kuohao(str,count);
		}
	}
	//return;
}

void main()
{
	char str[100];
	printf("请输入括号表达式:");
	scanf(" %s",str);
	//fflush(stdin);
	kuohao(str,0);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值