递归函数的构建

我刚看完关于递归的视频,老师留下两道作业。

1.用递归函数解决,汉诺塔问题。

2.一只青蛙,每次只能跳1步或2步,构造递归函数求到第n个台阶有多少种跳法。

这可让我犯难,不过老师讲过斐波那契数列,这两题和他应有相同之处。于是,我就利用数学上的函数关系式表明结果之间的关系式。

对于第一题,设盘数为n,要移f(n)次,列出次数,

n f(n)
1 1
2 3
3 7
4 15
... ...

观察知,f(n)=2^(n-1)+f(n-1),用递归程序写就有

​
int move(int x)
{
	if (x <= 0)
		return 0;
	else
		return  move(x-1)+pow(2.0,x-1);//这里用了math.h里的库函数
}

​

同理,对于第二题

n f(n)
1 1
2 2
3 3
4 5
5 8
... ...

f(n)=f(n-1)+f(n-2),这里的f(2)=f(1)+f(0)=2,f(1)=f(0)+f(-1),当0<=n<=1时,f(n)=1,n<0时,f(n)=0.


int jump(int x)
{
	if (x > 1)
		return (jump(x - 1) + jump(x - 2));
	else if (x<=1&&x>=0)
		return 1;
	else
		return 0;
}

这两题就完成了,写成完整代码

int my_str(char* str)
{
	if (*str != '\0')
		return 1 + my_str(str + 1);//递归求字符串长度
	else
		return 0;
}

int strl(char* s)
{
	int count = 0;
	while (*s != '\0')
	{
		count++;
		s++;
	}
	return count;//循环求字符串长度
}

int mul(int x)
{
	if (x <= 1)
		return 1;
	else
		return (x)*mul(x-1);//求阶乘
	
}
int move(int x)
{
	if (x <= 0)
		return 0;
	else
		return  move(x-1)+pow(2.0,x-1);
}

int jump(int x)
{
	if (x > 1)
		return (jump(x - 1) + jump(x - 2));
	else if (x<=1&&x>=0)
		return 1;
	else
		return 0;
}

int main()
{
	int n = 5;//自己设置
	char arr[] = "qwerasdfzxcv";
	printf("%d\n%d\n%d\n%d\n%d", my_str(arr),strl(arr),mul(n),move(n),jump(n));
return 0;
}

大佬们对递归有什么更好的见解,欢迎在下方评论。

上一篇:pytorch的Variable和Parameters的联系和区别


下一篇:pytorch detach()