我是靠谱客的博主 明亮路灯,最近开发中收集的这篇文章主要介绍跳台阶问题(递归分治),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

分析:递归做或者直接嵌套循环

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int ans=0;
 5 /*int f(int n){//递归算法,效率低!!!
 6     if(n==0) return 0;
 7     if(n<=2) return n;
 8     return f(n-1)+f(n-2); 
 9 }*/
10 
11 int f(int n){/*嵌套循环*/
12     if(n==0) return 0;
13     if(n==1) return 1;
14     int a=1,b=1;
15     int sum=0;
16     for( int i=2; i<=n; i++ ){
17         sum=a+b;
18         a=b;
19         b=sum;
20     }
21     return sum;
22 }
23 
24 int main(int argc, char const *argv[])
25 {
26     int n;
27     cin>>n;
28     ans=f(n);
29     cout<<ans<<endl;
30     return 0;
31 }

  拓展:变态跳台阶问题

 
题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级......它也可以跳上n级。此时该青蛙跳上一个n级的台阶总共有多少种跳法?
 
分析:用f(n)表示青蛙跳上n阶台阶的跳法数,设定f(0) = 1;
当n = 1 时,只有一种跳的方式,一阶跳,f(1) = 1
当n = 2 时,有两种跳的方式,一阶跳和两阶跳,f(2) = f(1) + f(0) = 2
当n = 3 时,有三种跳的方式,第一次跳出一阶后,后面还有f(3-1)中跳法; 第一次跳出二阶后,后面还有f(3-2)中跳法;第一次跳出三阶后,后面还有f(3-3)中跳法,f(3) = f(2) + f(1) + f(0) = 4
当n = n 时,第一次跳出一阶后,后面还有f(n-1)中跳法; 第一次跳出二阶后,后面还有f(n-2)中跳法......第一次跳出n阶后,后面还有 f(n-n)中跳法,即:
f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-n)+1 =1+ f(0) + f(1) + f(2) + ... + f(n-1)
又因为 f(n-1) =1+ f(0) + f(2) + f(3) + ... + f(n-2)
两式相减得:f(n) = 2 * f(n-1)    ( n >= 2)
                 |  0,n = 0
f(n)   =       |  1, n = 1
                 |  2 * f(n-1) , n >= 2
 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int ans=0;
 5 // int f(int n){//递归算法,效率低!!!
 6 //     if(n==0) return 0;
 7 //     if(n==1) return 1;
 8 //     return f(n-1)*2; 
 9 // }
10 
11 int f(int n){/*嵌套循环*/
12     if(n==0) return 0;
13     if(n==1) return 1;
14     int sum=1;
15     for( int i=2; i<=n; i++ ){
16         sum=2*sum;
17     }
18     return sum;
19 }
20 
21 int main(int argc, char const *argv[])
22 {
23     int n;
24     cin>>n;
25     ans=f(n);
26     cout<<ans<<endl;
27     return 0;
28 }

 

转载于:https://www.cnblogs.com/Bravewtz/p/10471064.html

最后

以上就是明亮路灯为你收集整理的跳台阶问题(递归分治)的全部内容,希望文章能够帮你解决跳台阶问题(递归分治)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部