本文目录一览:
什么是递归函数?举例
递归式解决逻辑问题的。基本思想是::把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。
c有一个汉诺塔,就是非用递归才能解决的一个问题。
利用递归算法解题,首先要对问题的以下三个方面进行分析:
一、决定问题规模的参数。需要用递归算法解决的问题,其规模通常都是比较大的,在问题中决定规模大小(或问题复杂程度)的量有哪些?把它们找出来。
二、问题的边界条件及边界值。在什么情况下可以直接得出问题的解?这就是问题的边界条件及边界值。
三、解决问题的通式。把规模大的、较难解决的问题变成规模较小、易解决的同一问题,需要通过哪些步骤或等式来实现?这是解决递归问题的难点。
递归函数的例子
这个行吗:
求1+2+……+100的和
先分析一下。第一递归变量的问题,从题目上看应该取1,2,……,100这些变量的值作为递归的条件;第二就是如何终止的问题,从题目上看应该是当数为100的时候就不能往下加了。那么我们试着写一下程序。-递归函数例子
int add(int);
main()
{
int num=1,sn;
sn=add(num);
printf("%d\n",sn);
getch();
}
int add(int num)
{
static int sn;
sn+=num;
if(num==100) return sn;
add(++num);
}
分析一下程序:前调用add(1),然后在子函数中把这个1加到sn上面。接着调用add(2),再把sn加2上来。这样一直到100,到了100的时候,先加上来,然后发现满足了if条件,这时返回sn的值,也就是1+2+……+100的值了。-递归函数例子
能详细点说明下递归吗,最好有现实例子说明
递归,简单的说就是自己调用自己,执行递归函数降反复调用其自身,每调用一次就进入新的一层。例如,有函数f如下。
int f(int x)
{
int y;
z=f(y);
return z;
}
这个函数是一个递归函数,但是运行该函数将无休止的调用自身,这当然是不正确的,在此只是给你举个简单的例子而已。为了防止调用无休止的进行,必须加条件判断,满足某种条件后就不再做递归调用,然后逐层返回。在此举例说明递归调用的执行过程。 -递归函数例子
用递归法计算n!.
long f(int i)
{
if(n0) printf("input error");return;
else if(i==0||i==1) return 1;
else return i*f(i-1);
}
main()
{
int n;
printf("please input n:\n");
scanf("%d",n);
printf("%d=%id\n",n,f(n));
}
程序中的f是一个递归函数,如果n0,n==0或者n==1时将结束函数的执行,否则就递归调用f函数自身。
假设输入3,即求3!。进入f函数i=3,不等于0或1,所以执行i*f(i-1),即
3*f(2)。然后再递归调用f(2),2不等于0或1,所以执行i*f(i-1),即2*f(1).继续调用f(1),此时1==1,结束函数的执行。
所以返回的结果是3*f(2)=3*2*f(1)=3*2*1=6.
希望你可以看懂,我感觉蛮简单的。
c语言 函数递归调用的简单例子
举一个用递归调用函数求输入非负整数的阶乘的例子,如下:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int fact(int n){
if(n==1 || n==0) return 1;
else return n*fact(n-1);
}
int main(void){
int x;
while(1){
printf("Input x(int 12=x=0)...\nx=");
if(scanf("%d",x),x=0 x=12)//x12时会使结果溢出
break;
printf("Error,redo: ");
}
printf("%d! = %d\n",x,fact(x));
return 0;
}