跳台阶(C语言算法)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。在此问题上,本文采用了较为常见的两种方法。

`

方法一(写出赋值方法并理解核心问题。)

代码如下(示例):


#include<stdio.h> 
int main()
{
	int a1=1,a2=2;
	int n,sum=0;
	scanf("%d",&n);
	if(n==1)
	{ 
		printf("1"); 
	}
	else if(n==2)
	{
	    printf("2");
    }
	else
	{
	int i;
	for(i=3;i<=n;i++)
	{
	    sum=a1+a2;
		a1=a2;
		a2=sum;
	  
	}
	printf("%d",sum);
    }
	return 0;
 }
根据前面几次台阶跳法可以知道,一个台阶跳法有1种,两个台阶跳法有2种,三个台阶跳法有3种,四个台阶跳法有5种,五个台阶跳法有8种,六个台阶跳法有13种.从中我们可以看出。当次数不小于三种的时候,下一次的台阶跳法是前两个台阶跳法之和。
for(i=3;i<=n;i++)
	{
	    sum=a1+a2;
		a1=a2;
		a2=sum;

将初始化的a1和a2的值首先赋给sum,然后再a2的值赋给a1,sum的值赋给a2,再进行循环,逐级赋给。就得到问题答案。


方法二(递归做法)

 #include<stdio.h>
int digui(int n)
 {
 	if(n==1||n==2)
 	{
 			return n;
	}
 	else
 	{
 		return digui(n-1)+digui(n-2);
	 }

 }
 int main()
 {
 	int n;
 	scanf("%d",&n);
 	int t=digui(n);
 	printf("%d\n",t);
 	return 0;
 	
 }			
if(n==1||n==2)
 	{
 			return n;
	}
 	else
 	{
 		return digui(n-1)+digui(n-2);
	 }

当n=1或者n=2时,return回本身。否则递归回表达式,就是它的前一项和前二项之和。

总结

方法一的优点是编译时更快捷一点,缺点是你自己要写好各种赋值关系。方法二是直接写出表达式,系统自己帮你算好。但递归是先从An=An-1+An-2中一层一层往上层推,直到n=1或2,再从1或2开始再一层层往下算值,编译时间可能稍微慢点。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值