简单的函数调用失败 ,我都不知道我可以这么蠢。。Help!!

问题描述

简单的函数调用失败 ,我都不知道我可以这么蠢。。Help!!
Wrong:
unsigned long long recursion_factorials(int num)
{
long long unsigned ret=1;
if(num>1)
ret =num*recursion_factorials(num--);
return ret;
}

我在main 函数里面调用这个递归函数,没有报错,用printf()也没有输出结果
改了倒数第二行代码:
改成 ret=num*recursion_factorials(--num);
结果就出来了。。
那么问题来了,为什么会产生这样的差异?如果是循环递归,为什么没有内存溢出。。。

解决方案

  • num--,先使用后计算
  • --num,先计算后使用
  • 在本题中,你用num--的话,相当于你在做5!的时候,用5!区计算,当然是一个没有终止的递归,所以出不了结果

解决方案二:
在函数开始处加个printf你就知道为什么了
http://blog.csdn.net/hanchaoman/article/details/5712379

解决方案三:
if(num>1)
这里都没符合条件,自然打印不了

后面的话,编译器会有一些不同的优化处理,防止递归深度

时间: 2024-10-31 01:36:12

简单的函数调用失败 ,我都不知道我可以这么蠢。。Help!!的相关文章

必读推荐- 90%的面试者都不知道这道题的答案

亲爱的DBA同胞们,你们是否记得在你找工作时,印象最深刻的面试题呢?那些看似简单的题目,实则蕴藏很大的玄机.今天我们通过一道经典的 ORacle DBA面试题目,去发现我们在面试中,到底还缺少那些能力? 这道题看起来很简单,然而,90%的面试者都不知道答案... 面试题描述: 对于一个NUMBER(1)的列,查询中的WHERE条件如果分别是大于3和大于等于4,二者是否等价. 乍一看,这个问题并不难.请读者朋友们在继续读下文之前,用30秒的时间思考. 接下来我们通过杨长老的博客,来说明面试者在这道

帮我看看这段ajax有什么问题,我看了很多遍,打死都不知道什么问题?

问题描述 帮我看看这段ajax有什么问题,我看了很多遍,打死都不知道什么问题? 1原代码: echo"<li><a href='javascript:void(0);' id='newjh'>提交</a></li>"; jquery代码: $("#newjh").click(function(){ user=$("#user").val();eml=$("#eml").val()

html-这个验证跳转总是失败,实在不知道错在哪,可以帮我看看吗?

问题描述 这个验证跳转总是失败,实在不知道错在哪,可以帮我看看吗? 主页登陆<br> function check() {<br> if (document.forms(0).name.value == "123" && document.forms(0).pw.value == "123456") {<br> window.location = "body.html";<br> }

c++ 内存问题 找了好久都不知道呢错了

问题描述 c++ 内存问题 找了好久都不知道呢错了 #include<iostream> using namespace std; struct Node { float coef;//系数 int expn;//指数 Node* next; }; class Ploy { public: Ploy(); ~Ploy(); void CreatePloy(int n); void DispPloy(); void PloyAdd(Ploy b); Node* GetNode() { retur

api隐藏函数调用-失败

问题描述 api隐藏函数调用-失败 private void removeAndDeleteGroup(WifiP2pGroup wifiP2pGroup) { mManager.removeGroup(mChannel, null); try { Method getNetworkId = WifiP2pGroup.class.getDeclaredMethod("getNetworkId"); Integer networkId = (Integer) getNetworkId.i

vs2012-我的C程序VS2013报错,都不知道错哪了,请大神指教

问题描述 我的C程序VS2013报错,都不知道错哪了,请大神指教 hash函数名和数组next都定义了,都不知道哪错了 解决方案 感觉是标准库的某些内容重复了. std::next是里的template, std::hash是里的template. 都是c++ 11定义的. 解决方案二: 自己重新定义一下名字,这几个名字已经在类库中存在了 解决方案三: 你的定义重复了,如果你的代码没有重复定义它们,可能是和你包含的库文件冲突了,那么换个名字看看 解决方案四: hash和next重复定义了. 你可

java隐藏函数调用失败---求教

问题描述 java隐藏函数调用失败---求教 private void removeAndDeleteGroup(WifiP2pGroup wifiP2pGroup) { mManager.removeGroup(mChannel, null); try { Method getNetworkId = WifiP2pGroup.class.getDeclaredMethod("getNetworkId"); Integer networkId = (Integer) getNetwor

安装飞腾dll函数调用失败,程序终止 请解救?

问题描述 安装飞腾dll函数调用失败,程序终止 请解救? 解决方案 可能你传递的参数不对,造成DLL处理不正确,异常了

“连51Talk都不知道你怎么学英语啊?”

--51Talk三周年学员故事 刚刚宣布完成C轮融资的51Talk无忧英语上线三周年了.作为一家主打高性价比的平民英语口语在线教学机构,"草根"出身的51Talk三年来经历了曲折,也有过欣喜与感动的时刻.这三年来凭借口碑逐渐走进千家万户的51Talk能坚持到今天,都是因为一直以来坚持学习的可爱用户们. 在探访资深用户过程中,一个多才多艺的小孩子走进了工作人员的心中.周周,今年六岁.初次见面,感觉她是个和同龄孩子一样爱笑.好动的北京小姑娘.不过,她一头自来卷的长头发,略显凹陷的明亮大眼睛