我有一题C++的问题解决不了。需要详细的分析解答。希望专业人士帮帮忙~~小弟在此谢过~~X=10

intfun(intn){if(n==1)return1;elsereturn(n+fun(n-1));}main(){intx;scanf("%d",&x);x=fun... int fun(int n)
{
if(n==1)return 1;
else return(n+fun(n-1));
}
main()
{
int x;
scanf("%d",&x);
x=fun(x);
printf("%d\n",x);
}
展开
 我来答
676637801
2011-04-30 · 超过27用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:75.3万
展开全部
额,这是典型的递归算法,更详细的汉罗塔问题里面有讲
其他的都是浮云,关键是x=fun(x)
楼主说x初始值为10,那我们看,fun(10)等于多少
把10带入fun里面,走一下,返回值是return( 10 + fun( 9 ) )
因此。我们计算fun( 9 ),再次带入fun( 9 )返回值是9 + fun( 8 )
不断带入,每一次fun()里面的参数都减一,直到变为fun( 1 ),
由于if(n==1)return 1,因此fun( 1 )返回的是1,停止递归
所以计算fun( 2 ) = 2 + fun( 1 ) = 2 +1
fun( 3 ) = 3 + fun( 2 ) = 3 +2 +1....
fun( 10) = 10 + fun( 9 ) = 10 + 9 + 8 +....+ 2 + 1 = 55
其实递归算法不是很难,楼主可以这样看,对于这个我们记fun( n ) 为 a(n)
因此很容易得到a( n )= n + a( n-1 )
初始值a( 1 ) = 1
计算a( 10 )就是了
其他递归算法也是类似的,具体可以看谭浩强c程序设计里面递归讲解
百度网友575f756
2011-04-30 · TA获得超过171个赞
知道小有建树答主
回答量:254
采纳率:0%
帮助的人:146万
展开全部
X=fun(x);
换个变量名字,
int a=fun(x);
printf("%d\n",a);
就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-04-30
展开全部
这是递归运算,求的就是10+9+8+7+6+5+4+3+2+1=55
通过调用fun(10)=10+fun(9); fun(9)=9+fun(8); fun(8)=8+fun(7); ........依此类推....; fun(1)=1; 这是递推过程
递推结束后。就要回归,从fun(1)=1; 可以计算出fun(2)=2+fun(1)=2+1=3; fun(3)= 3+fun(2)=3+3=6; fun(4)=4+fun(3)=4+6=10; ....依次类推.....; fun(10)=10+fun(9)=10+45=55
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shwwwusdo
2011-04-30 · TA获得超过111个赞
知道答主
回答量:238
采纳率:0%
帮助的人:117万
展开全部
你的问题什么意思呢。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式