关于递归

hahayezhe112 2010-03-17 11:27:20
对于程序执行的次顺 顺序等有些不解 迷惑 忘高手不惜赐教
比如下面程序
#include <stdio.h>
void fun(int n,int *s)
{ int f1,f2;
if(n==1||n==2) *s=1;
else
{fun(n-1,&f1); fun(n-2,&f2);*s=f1+f2;}
}
int main()
{ int x;
fun(6,&x);printf("%d\n",x);
return 0;
}
此段程序运行到{fun(n-1,&f1); fun(n-2,&f2);*s=f1+f2;}时
首先执行fun(n-1,&f1); 进入递归 那么还会否执行后面的fun(n-2,&f2);*s=f1+f2;

当写成这样呢
else
{fun(n-1,&f1);
fun(n-2,&f2);
*s=f1+f2;}

又是一样吗?
这样呢 又是什么情况
else
{fun(n-1,&f1); }
fun(n-2,&f2);
*s=f1+f2;


而根据这个程序fun(6,&x);传送只是一个X的地址
S是储存的X的地址 只有当if(n==1||n==2) *s=1;才能退出循环的么X不是应该输出1么?

...全文
61 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dudangyimian 2010-03-17
  • 打赏
  • 举报
回复
在语句fun(n-1,&f1); 后面加打印
在调试中成长,这是最好最快的成长方式
祝楼主成功
hahayezhe112 2010-03-17
  • 打赏
  • 举报
回复
想不到这种双递归这么复杂 如果n赋值 大点 那么完全无法想象它的值 有没有一种算法呢 来算这个值?
hahayezhe112 2010-03-17
  • 打赏
  • 举报
回复
我调式想明白了 谢谢!
dubiousway 2010-03-17
  • 打赏
  • 举报
回复
首先执行fun(n-1,&f1); 进入递归 那么还会否执行后面的fun(n-2,&f2);*s=f1+f2;
当然会

else
{fun(n-1,&f1);
fun(n-2,&f2);
*s=f1+f2;}

和 {fun(n-1,&f1); fun(n-2,&f2);*s=f1+f2;} 哪里不一样啊?没看懂你意思

else
{fun(n-1,&f1); }
fun(n-2,&f2);
*s=f1+f2;
意思乱了。if,else 语句的执行意思,难道lz 都不明白吗?


而根据这个程序fun(6,&x);传送只是一个X的地址
S是储存的X的地址 只有当if(n==1||n==2) *s=1;才能退出循环的么X不是应该输出1么?
后面不是还有*s=f1+f2吗
你输入n=1,或者2 ,自然是1


hahayezhe112 2010-03-17
  • 打赏
  • 举报
回复

#include "stdafx.h"
//#include <stdio>
int i=0,j=0;
void fun(int n,int *s)
{ int f1,f2;
j++
if(n==1||n==2) *s=1;
else
{fun(n-1,&f1);
fun(n-2,&f2);
*s=f1+f2;
i++;}
}
int main()
{ int x;
fun(6,&x);printf("%d%d%d\n",x,i,j);
return 0;
}

这是关于调式编的代码 逐句调式后 还是不太明白 望高手讲解下!

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧