| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2017 人关注过本帖
标题:通过函数的递归调用,实现:有n级台阶,一步可以上一级台阶,也可以一步上两 ...
只看楼主 加入收藏
m3440426898
Rank: 2
等 级:论坛游民
帖 子:41
专家分:17
注 册:2022-2-3
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:5 
通过函数的递归调用,实现:有n级台阶,一步可以上一级台阶,也可以一步上两级台阶,问上完n级台阶,有多少种走法?
通过函数的递归调用,实现:有n级台阶,一步可以上一级台阶,也可以一步上两级台阶,问上完n级台阶,有多少种走法?
填空,顺便解释一下程序呗,下面自定义函数的功能,详细些。
#include <stdio.h>
int tj(int m);
main()
{
    int n;
    printf("请输入台阶的级数:");
    【1】;
    printf("走完%d级台阶有%d种走法\n",n,【2】);
}

int tj(int m)
{
    if(m==1)
        【3】;
    else if(m==2)
        【4】;
    else
        【5】;
}
搜索更多相关主题的帖子: 函数 int 多少 台阶 调用 
2022-03-12 15:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:20 
第i级台阶 可能是 第i-2级台阶跨上来的,也可能是 第i-1级台阶走上来的,
所以 f(n) = f(n-1) + f(n-2),即 走到第i级台阶的走法数量 = 走到第i-1级台阶的走法数量 + 走到第i-2级台阶的走法数量
它就是个斐波那契数列,f(0)=1, f(1)=1, f(2)=2, f(3)=3, f(4)=5, f(5)=8, f(6)=13, ……

程序代码:
#include <stdio.h>

unsigned foo( unsigned n );

int main( void )
{
    unsigned n;
    printf( "请输入台阶的级数:" );
    scanf( "%u", &n );
    printf( "走完%u级台阶有%u种走法\n", n, foo(n) );
}

unsigned foo( unsigned n )
{
    if( n == 1 )
        return 1;
    if( n == 2 )
        return 2;
    return foo(n-1) + foo(n-2);
    // 以上算法很恶心,且含bug,抱歉,因为是题目强制要求的
}
2022-03-12 17:39
m3440426898
Rank: 2
等 级:论坛游民
帖 子:41
专家分:17
注 册:2022-2-3
收藏
得分:0 
回复 2楼 rjsp
foo(i-1)+foo(i-2);这句,它不应该是先统计i-1,就是一次一步的走法,再统计i-2,一次两步的走法再加起来嘛,那一步两步混合呢?
2022-03-15 09:49
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用m3440426898在2022-3-15 09:49:55的发言:

foo(i-1)+foo(i-2);这句,它不应该是先统计i-1,就是一次一步的走法,再统计i-2,一次两步的走法再加起来嘛,那一步两步混合呢?

foo(n) 是走到第n级台阶的走法数量,不管是一步一级,还是一步两级,还是三奔一跳,……

随便举个例子,假如走到第9级台阶(随便怎么走)共有a种走法,走到第10级台阶(随便怎么走)共有b种走法,那走到第11级台阶必然是共有a+b种走法。
因为在第9级台阶上可以"一步上两级台阶"直接上到第11级台阶,所以走到9级的所有走法都可以最后"一步上两级台阶"到第11级台阶;
因为在第10级台阶上可以"一步上一级台阶"上到第11级台阶,所以走到10级的所有走法都可以最后"一步上一级台阶"到第11级台阶。
2022-03-15 16:29
m3440426898
Rank: 2
等 级:论坛游民
帖 子:41
专家分:17
注 册:2022-2-3
收藏
得分:0 
回复 4楼 rjsp
那bug在哪里呀
2022-03-18 14:52
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 5楼 m3440426898
当 n == 0 时,逻辑错误

明明可以写个正常的
程序代码:
unsigned foo( unsigned n )
{
    if( n == 0 )
        return 1;
    if( n == 1 )
        return 1;
    return foo(n-1) + foo(n-2);
}

另外,原代码用的竟然是int,没必要说,直接改掉
2022-03-18 19:17
快速回复:通过函数的递归调用,实现:有n级台阶,一步可以上一级台阶,也可以一 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031799 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved