关于递归的
时间:2011-11-28
来源:互联网
{if(n>1)return 1;
else return n*fun(n*2)
}
为什么这个不是正确的递归函数
作者: tingfengx 发布时间: 2011-11-28

你这个n为负数的话,那就死了
作者: qscool1987 发布时间: 2011-11-28
作者: pengzhixi 发布时间: 2011-11-28
n == 0 时, 直接因找自身而死循环
n >= 1 时正确
作者: mougaidong 发布时间: 2011-11-28
作者: tingfengx 发布时间: 2011-11-28
C/C++ code
int fun(int n) { if(n>1 | n < 某个负数)return 1; else return n*fun(n*2) }
作者: xingfeng2510 发布时间: 2011-11-28
就是说正确的递归必须所有的情况都满足,不能只满足一部分?
当然,递归必须是有限次调用,并且至少有一个出口。
作者: xingfeng2510 发布时间: 2011-11-28
对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。
具体的就是说,必须有一个或有限几个初值并能使其他值能最终收敛到这个初值上来!!
递归一般有一个递推公式而来。
对于楼主的程序,有两个问题!
1.初值不明确,应该改成 if(n==0) return 1;
2. 在递归部分,当n>1时,f(n*2)总是大于f(n)呈现发散而非收敛
稍微修改后的程序为:
C/C++ code
#include <iostream> int fun(int n) { if(n==1)return 1; else return n*fun(n/2); }; int main() { cout<<fun(15)<<endl; }
仅供参考!!
作者: timerfire 发布时间: 2011-11-30
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28