5个回答
展开全部
递归函数定义:编程语言中,函数Func()直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联函数。在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。
由于递归函数不断调用自己的特性,必须使用边界条件约束,来退出递归,停止迭代,否则是一个不断增大的死循环。
在C语言中,一般采用 return value;的方式退出本次递归,其中value为返回值,对于没有返回值的函数,return即可。
在C语言中,若是需要直接终止整个递归,包括主程序,可以采用 exit()函数终止。
展开全部
递归是对递推关系的模拟;
你的问题,有什么样的递推结构,在什么情况下,不需要递推,可以直接得出结论。
了解了这些情况,你就可以着手写代码了。
这样的代码,自然就,以递归函数实现,最方便了。
1)那种可以,直接解决问题的情况,自然就是直接返回的条件了。
2)那种需要递推,才可以解决的,自然就写成,递归调用了。
3)那种实际的,执行代码,自然就夹在,递归调用之间,写出来了。
写递归函数,主要分析,
1)何时结束
2)何时递归调用
3) 执行任务的代码写在哪里。
递归调用本身,并不是解决,实际问题的方案。只是解决复杂结构问题的,一种方法。
解决实际问题时,要结合所执行的任务来写代码。
比如,树的遍历。
递归只是个框架,执行遍历本身要干什么,比如打印节点数据,这才是递归函数的任务。
一个框架搭起来了,可以解决一批相同结构的问题。
然而一个空的框架,什么问题也解决不了。即使搭的再好,也无用。
你的问题,有什么样的递推结构,在什么情况下,不需要递推,可以直接得出结论。
了解了这些情况,你就可以着手写代码了。
这样的代码,自然就,以递归函数实现,最方便了。
1)那种可以,直接解决问题的情况,自然就是直接返回的条件了。
2)那种需要递推,才可以解决的,自然就写成,递归调用了。
3)那种实际的,执行代码,自然就夹在,递归调用之间,写出来了。
写递归函数,主要分析,
1)何时结束
2)何时递归调用
3) 执行任务的代码写在哪里。
递归调用本身,并不是解决,实际问题的方案。只是解决复杂结构问题的,一种方法。
解决实际问题时,要结合所执行的任务来写代码。
比如,树的遍历。
递归只是个框架,执行遍历本身要干什么,比如打印节点数据,这才是递归函数的任务。
一个框架搭起来了,可以解决一批相同结构的问题。
然而一个空的框架,什么问题也解决不了。即使搭的再好,也无用。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
我们要注意的就是在使用递归的时候,必须有一个明确的递归结束条件,称为递归出口。另外具体问题具体分析,给个简单的例子吧
#include <stdio.h>
#include <stdlib.h>
float myfunction(int n,int x)
{
if (0 == n)
{
return 1;
}
else if (1 == n)
{
return x;
}
else
{
return ((2 * n - 1) * x - myfunction(n - 1 , x) - (n - 1) * myfunction(n - 2, x)) / n;
}
}
int main(int argc, char *argv[])
{
int n,x;
float result;
printf("please inputa n,x:");
scanf("%d,%d",&n,&x);
result = myfunction(n,x);
printf("the result is : %f\n",result);
system("pause");
return 0;
}
此程序出处http://zhidao.baidu.com/question/356821940.html
LZ可自行揣测。
我们要注意的就是在使用递归的时候,必须有一个明确的递归结束条件,称为递归出口。另外具体问题具体分析,给个简单的例子吧
#include <stdio.h>
#include <stdlib.h>
float myfunction(int n,int x)
{
if (0 == n)
{
return 1;
}
else if (1 == n)
{
return x;
}
else
{
return ((2 * n - 1) * x - myfunction(n - 1 , x) - (n - 1) * myfunction(n - 2, x)) / n;
}
}
int main(int argc, char *argv[])
{
int n,x;
float result;
printf("please inputa n,x:");
scanf("%d,%d",&n,&x);
result = myfunction(n,x);
printf("the result is : %f\n",result);
system("pause");
return 0;
}
此程序出处http://zhidao.baidu.com/question/356821940.html
LZ可自行揣测。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
需要设置一个退出的条件,比如
f(int i)
{
if(i==0)
return;
else
{
f(i-1);
}
}
这样当i递减到0的时候,就不会再继续递归了
f(int i)
{
if(i==0)
return;
else
{
f(i-1);
}
}
这样当i递减到0的时候,就不会再继续递归了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对递归函数中的某一关键变量设置阈值条件。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询