关于递归的解决思路
关于递归的
int fun(int n)
{if(n>1)return 1;
else return n*fun(n*2)
}
为什么这个不是正确的递归函数
------解决方案--------------------
因为 n = -1 时,没有结束语句了 fun(-1) 回去找fun(-2) 而 fun(-2)回去找 fun(-4)
n == 0 时, 直接因找自身而死循环
n >= 1 时正确
------解决方案--------------------
n<=1时无穷递归,没有退出的出口。可以加上下界控制。
int fun(int n)
{if(n>1)return 1;
else return n*fun(n*2)
}
为什么这个不是正确的递归函数
------解决方案--------------------
因为 n = -1 时,没有结束语句了 fun(-1) 回去找fun(-2) 而 fun(-2)回去找 fun(-4)
n == 0 时, 直接因找自身而死循环
n >= 1 时正确
------解决方案--------------------
n<=1时无穷递归,没有退出的出口。可以加上下界控制。
- C/C++ code
int fun(int n) { if(n>1 | n < 某个负数)return 1; else return n*fun(n*2) }
------解决方案--------------------
递归的定义:
对于某一函数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; }