C语言项目爬楼梯的两种实现方法参考
【项目-爬楼梯】
楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序计算共有多少种不同的走法?
【参考解答(递归法)】
基础:楼梯有一个台阶,只有一种走法(一步登上去);两个台阶,有2种走法(一步上去,或分两次上去);
递推:有n个台阶时,设有count(n)种走法,最后一步走1个台阶,有count(n-1)种走法;最后一步走2个台阶,有count(n-2)种走法。于是count(n)=count(n-1)+count(n-2)。
可见,此问题的数学模型竟然是斐波那契数。
#includeintmain() { unsignedlongcount(intn); intn; unsignedlongm; printf("请输入楼梯的阶数:"); scanf("%d",&n); m=count(n); printf("有%lu种爬楼梯的方法\n",m); return0; } unsignedlongcount(intn) { unsignedlongf; if(n==1) f=1; elseif(n==2) f=2; else f=count(n-1)+count(n-2); return(f); }
递归思路清晰,但却“成本”高。另一个方法,在完成问题建模之后,采用了一种很巧妙的“非常规”的做法,将运算量减少了一半。
//计163-1姜淇瀚 #include<stdio.h> #include<stdlib.h> intmain() { intfib(inta,intb,intn); intn; scanf("%d",&n); printf("%d",fib(0,1,n)); return0; } intfib(inta,intb,intn) { if(n==3) { returna+b; } returnfib(b,a+b,n-1); }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。