int fun(int x){return(x<3?1:(fun(x-1)+2*fun(x-2))

 我来答
哟月乾07
2019-06-27 · TA获得超过2282个赞
知道大有可为答主
回答量:2934
采纳率:0%
帮助的人:171万
展开全部
s=4,printf();//大括号错误
分析如下:
static 定义的局部变量,在函数调用时只初始化一次,也就是说只有第一次调用fun时,static int x=1;才有效,而在后面无论多少次调用,x的值不会被初始化,所以该函数作用相当于每次调用,x都变成其值的二倍,所以调用2次,输出结果为4。
扩展:若把static去掉,则每次调用时,x都先被初始化为1,然后返回x*2,即2,这样每次调用结果都一样(2),所以不管调用多少结果都为2。
下面解释下为什么局部static变量其值会有保存?而一般局部变量不能保存其值?因为static变量的存储位置为程序的静态区,而一般函数局部变量是存储在函数栈中,这样在函数调用结束后,程序静态区的变量不销毁,而栈中的局部变量会销毁,所以才会有以上的两种截然不同的结果。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式