| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 629 人关注过本帖
标题:求一道c语言的
只看楼主 加入收藏
zdx877
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-1-27
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:9 
求一道c语言的
#include<stdio.h>
 int fun(int n,int *s)
 {   
     int f1,f2;   
     if(n==0 || n==1)   
         *s=1;   
     else   
     {        
     fun(n-1,&f1);   
     fun(n-2,&f2);     
     *s=f1+f2;     
     }     
     return 0;
 }
main()
 {   
     int x;   
     fun(6,&x);  
     printf("%d\n",x);        
     return 0;
 }

运行的结果是13。
以下这一块我不知道怎么计算的,
求详细的思路
else   
     {        
     fun(n-1,&f1);   
     fun(n-2,&f2);     

[ 本帖最后由 zdx877 于 2013-1-27 11:04 编辑 ]
搜索更多相关主题的帖子: return include fun 
2013-01-27 11:02
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:1 
fun(0,&x0);
fun(1,&x1);

x0 = x1 = 1

fun(2,&x2)
x2 = x0 + x1 = 2

x3 = x2 + x1 = 3

x4 = x3+x2 = 5
x5 = x4+x3=8
x6 = x5 + x4=13




 

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-01-27 11:16
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:1 


 反过来看就行了

斐波那契数~~



[ 本帖最后由 yuccn 于 2013-1-27 11:18 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-01-27 11:16
乾坤洞主
Rank: 3Rank: 3
来 自:乾坤洞
等 级:论坛游侠
帖 子:93
专家分:103
注 册:2012-7-18
收藏
得分:1 
回复 3楼 yuccn
else
     {
     fun(n-1,&f1);     fun(n-2,&f2);
     *s=f1+f2;
     }这种递归如何执行的?

和尚我爱四处游,疯疯癫癫有理由    
开开心心是正道,愁愁烦烦不应该
2013-01-27 12:11
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:1 
回复 4楼 乾坤洞主
{
      fun(n-1,&f1); // 先求出f(n-1),再求f(n-2)
     fun(n-2,&f2);
      *s=f1+f2; // f(n) = f(n-1) + f(n-2)

递归过程就是自己调用自己
      

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-01-27 12:15
乾坤洞主
Rank: 3Rank: 3
来 自:乾坤洞
等 级:论坛游侠
帖 子:93
专家分:103
注 册:2012-7-18
收藏
得分:1 
回复 5楼 yuccn
就是理解不了 fun(n-1,&f1);后面的语句如何执行到的?递归函数不是返回了再从入口开始执行么?

和尚我爱四处游,疯疯癫癫有理由    
开开心心是正道,愁愁烦烦不应该
2013-01-27 12:18
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:11 
main()
 {   
     int x;   
     fun(6,&x); // 这个地方调用  fun(6,&x);  和fun(n-1,&f1) 的原理是一样的
      printf("%d\n",x);        
      return 0;
 }
 
红色的那个,main中调用fun 和fun中递归调用fun 是一样的,都是一个函数调用另一个函数。
只是被调用的是自己本身而已

函数本质上就是一个内存地址, 调用函数 只是压进几个堆栈的参数之后再一个call。
fun(int n,int *s)的调用等价于

push ~~
push ~~
call

call 等价于 push 下一条指令的 eip,再 jmp fun


你先拿本基础的书籍来看下函数的章节吧。一般的基础的书都会见到递归的原理

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-01-27 12:27
zdx877
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-1-27
收藏
得分:0 
回复 2楼 yuccn
纠结了几天,终于明白了
直接fun(6-1,&f1);
    fun(6-2,&f1);
*s=f1+f2//fun(5)+fun(4)=13对吗???
2013-01-29 23:35
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:4 
可以这样打比方吧

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-01-29 23:42
此夜望月
Rank: 2
等 级:论坛游民
帖 子:55
专家分:43
注 册:2012-12-29
收藏
得分:0 
其实这种问题动手算一算,思路就更清晰了。按着程序的步骤来思考(可以把6换成3或者2,这样步骤少一些,便于思考问题)。然后最笨的,但也是最直接简单准确的方法,就是把自己当作电脑,按着电脑的步骤来计算。
2013-01-30 09:00
快速回复:求一道c语言的
数据加载中...
 
   



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

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