| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2361 人关注过本帖
标题:return f(m-1,n-1)+f(m-1,n)是怎么个运算法
只看楼主 加入收藏
LOVE燕
Rank: 2
等 级:论坛游民
帖 子:37
专家分:12
注 册:2012-11-14
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:4 
return f(m-1,n-1)+f(m-1,n)是怎么个运算法
#include"stdio.h"
    int f(int m, int n)
    {
        if(m==0) return 1;
        if(n==0 || n==m) return 1;
       return f(m-1,n-1)+f(m-1,n);

    }


    void main()
    {
       int m,n,H;
       scanf("%d%d",&m,&n);
       H=f(m,n);
       printf("%d",H);
       getch();

    }





当输入m=3,n=2的时候。经过H=f(3,2)被上面一个函数调用。。经过两个if都不满足。。执行return f(m-1,n-1)+f(m-1,n);这时return f(3-1,2-1)+f(3-1,2).之后它是怎么运算的了。而得到返回值是一个整型数字。再比如我用了个输出是这样的printf("%d  ",f(m,n));  如果是m=3,n=2   那么他输出的是 1  2 就是不明白他是怎么运算出来得到1和2。
搜索更多相关主题的帖子: return include 
2012-11-25 22:30
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:0 
这个是递归,你写的是求一个求组合数的递归方法,你查一下网上应该有好多

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-11-25 22:39
ltianc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:56
专家分:128
注 册:2012-10-16
收藏
得分:10 
这个考察的是递归的用法,比如输入:2  1
带入即求f(2-1,1-1)+f(2-1,1);
再分别求f(1, 0)和 f(1, 1)的值,他们分别是1    1,二则相加等于2.

世界等我去改变。
2012-11-25 22:44
youngdavid
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:698
注 册:2012-9-24
收藏
得分:10 
这是递推的实现,它的过程大致是这样的,比如计算fun(3)过程:
执行时遇到fun(2),保存当前的n(n=3)以及fun(2)执行完后的返回地址;然后继续执行,继续对局部变量和函数返回地址入栈保存。直到遇到递归结束条件,开始弹栈,这是将栈顶n域值恢复给n,栈顶地址域作为返回地址出栈,继续这样下去,直到栈空,最终所得的n就是所要求得值。
不知道这样的描述你能不能懂。总之,利用栈的先进先出特性,先往下递推,遇到结束条件后回溯(弹栈求结果,最后返回)。
2012-11-25 22:53
LOVE燕
Rank: 2
等 级:论坛游民
帖 子:37
专家分:12
注 册:2012-11-14
收藏
得分:0 
回复 4楼 youngdavid
还是不太明白,递归学的不怎么好,我还是回去看看书先吧,谢谢啦
2012-11-26 08:55
快速回复:return f(m-1,n-1)+f(m-1,n)是怎么个运算法
数据加载中...
 
   



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

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