读书人

关于递归的解决思路

发布时间: 2012-05-21 18:04:41 作者: rapoo

关于递归的
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;elsereturn n*fun(n/2);};int main(){ cout<<fun(15)<<endl; } 

读书人网 >C++

热点推荐