社区
C语言
帖子详情
一道面试题---北电的,请进......
free131
2006-04-07 09:43:20
static int f(int i)
{
return f(i-1)*f(i-1);
}
这个函数在调用的时候为什么会终止呢(VC6.0),按我的理解应该是一个无限递归才对啊
还有f(i-1)*f(i-1)的执行过程到底是怎样的,乘号右边的f(i-1)会执行到吗?
请达人说一说
...全文
491
10
打赏
收藏
一道面试题---北电的,请进......
static int f(int i) { return f(i-1)*f(i-1); } 这个函数在调用的时候为什么会终止呢(VC6.0),按我的理解应该是一个无限递归才对啊 还有f(i-1)*f(i-1)的执行过程到底是怎样的,乘号右边的f(i-1)会执行到吗? 请达人说一说
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yzx1983
2006-04-07
打赏
举报
回复
听说*的操作数计算顺序没有定义,那么说不定是先执行右边的,而左边的不会执行……
jixingzhong
2006-04-07
打赏
举报
回复
流程,解f(3):
举个例子, 楼主的程序加个终结条件:
int f(int i)
{
if(i == 1 )return 2;
return f(i-1)*f(i-1);
}
那么
1:f(3) = f(2)*f(2)
2:左边f(2) = f(1)*f(1)
3:左边f(1) = 2,返回第二步
4:左边f(2) = 2*f(1) = 2*2(这里的递归就不列出来了) = 4,返回第一步
5:f(3) = 4*f(2),继续递归计算右边f(2) ...
但是由于楼主的程序没有左边递归的终结,
无限递归必然导致内存不足,
右边的自然就不会执行 ...
jixingzhong
2006-04-07
打赏
举报
回复
还有f(i-1)*f(i-1)的执行过程到底是怎样的,乘号右边的f(i-1)会执行到吗?
---------------------------------
乘号右边的f(i-1)应该没有执行的机会了 ...
由于没有终止条件,
左边的f(i-1)会一直递归,
直至内存耗尽...
右边的自然就没有机会了 ~
yuanchuang
2006-04-07
打赏
举报
回复
这又是一个求值顺序的问题。
给你个链接:
http://blog.csdn.net/yuanchuang/archive/2006/03/20/629723.aspx
yuanchuang
2006-04-07
打赏
举报
回复
应该是无限循环。
还有f(i-1)*f(i-1)的执行过程到底是怎样的,乘号右边的f(i-1)会执行到吗?
---------------------------------------------------------------------------
编译器不同,先执行的也不同,有的先执行左边的,那右边的就应该执行不到了
反之亦然
vanlover
2006-04-07
打赏
举报
回复
呵呵,试了试,一楼说的不错
duduhaha
2006-04-07
打赏
举报
回复
你可以自己调试一下,递归调用的开销超出了默认堆栈的大小时就会退出.当然堆栈大小可以设置.
对于下面的程序.
#include <stdio.h>
static int f(int i)
{
return f(i-1)*f(i-1);
}
int main()
{
int i = f(10);
printf("%d\n",i);
return 0;
}
我这边看当i = -11763时退出.
alucardpj
2006-04-07
打赏
举报
回复
在dev c++上面是无限递归,你说的终止,会不会是因为栈溢出呀?
adintr
2006-04-07
打赏
举报
回复
大概只会在堆栈用完后程序崩溃而退出
xiangding
2006-04-07
打赏
举报
回复
一定是栈溢出而停止,
青少儿编程NOIP信息学奥赛通关必备-C++语法专题-程序的分支结构-if...else...语句
2、本课程每节课均配有练习题以及真题,以锻炼孩子的解题能力; 3、本课程是基于小学生的认知发展水平开发的,运用孩子生活中常见的例子来阐述编程知识,让孩子听得懂学得会; 4、学完本课程后,孩子可以自主编程,...
C/C++面试感受和经验以及
面试题
收藏
前段时间刚参加了n多公司的C/C++软件工程师的面试,有国企,外企,私企(moto,飞思卡尔,港湾,中国卫星XXX(这个牛))等等等等。感受感想颇多,近日终于空闲,在此表述一下。 本人基本条件:3年开发经验,2...
面试题
changetitle(); Sony笔试题 1.完成下列程序 * *.*. *..*..*.. *...*...*...*... *....*....*....*....*.... *.....*.....*.....*.....*.....*..... *......*......*......*......*......*......*.
46家公司面试笔试题
Sony笔试题 1.完成下列程序 * *.*. *..*..*.. *...*...*...*... *....*....*....*....*.... *.....*.....*.....*.....*.....*..... *......*......*......*......*......*......*...... *.......*.......*.
综合
面试题
IT公司面试-笔试题目1 1一个父类写了一个virtual函数,如果子类覆盖它的函数不加virtual ,也能实现多态? 在子类的空间里,有没有父类的这个函数,或者父类的私有变量? (华为笔试题) 答案:只要基类在定义...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章