×

递归函数例子

递归函数例子(c语言递归函数)

admin admin 发表于2023-04-28 04:35:09 浏览47 评论0

抢沙发发表评论

本文目录

c语言递归函数

  递归函数:
  编程语言中,函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联函数。
  在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。
  函数介绍:
  在数理逻辑和计算机科学中,递归函数或μ-递归函数是一类从自然数到自然数的函数,它是在某种直觉意义上是“可计算的“ 。事实上,在可计算性理论中证明了递归函数精确的是图灵机的可计算函数。递归函数有关于原始递归函数,并且它们的归纳定义(见下)建造在原始递归函数之上。但是,不是所有递归函数都是原始递归函数 — 最著名的这种函数是阿克曼函数。
  其他等价的函数类是λ-递归函数和马尔可夫算法可计算的函数。
  例子:
  //代码1
  void func()
  {
  //...
  if(...)
  func();
  else
  //...
  }
  条件:
  一个含直接或间接调用本函数语句的函数被称之为递归函数,在上面的例子中能够看出,它必须满足以下两个条件:
  1) 在每一次调用自己时,必须是(在某种意义上)更接近于解;
  2) 必须有一个终止处理或计算的准则。
  梵塔的递归函数:
  //C
  void hanoi(int n,char x,char y,char z)
  {
  if(n==1)
  move(x,1,z);
  else
  {
  hanoi(n-1,x,z,y);
  move(x,n,z);
  hanoi(n-1,y,x,z);
  }
  }

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)//x》12时会使结果溢出
            break;
        printf(“Error,redo: “);
    }
    printf(“%d! = %d\n“,x,fact(x));
    return 0;
}

递归函数

先举个比较简单的例子——当k=3时:
(给你的程序加上行号,以便解释)
/*程序段1(k=3)*/
Line1: p(3)
Line2: {
Line3: if (3》0)
Line4: { std::cout《《3《《“ “《《std::endl;
Line5: p(2);
Line6: p(2);
Line7: }
Line8: }
程序段1执行到第4行时,屏幕上显示“3 ”(注:引号不包括在内,下同)
接着执行到第5行,进入函数p(2):
/*程序段2(k=2)*/
Line1: p(2)
Line2: {
Line3: if (2》0)
Line4: { std::cout《《2《《“ “《《std::endl;
Line5: p(1);
Line6: p(1);
Line7: }
Line8: }
程序段2执行到第4行,新输出“2 ”,屏幕上显示“3 2 ”;
执行到第5行,进入函数p(1):
/*程序段3(k=1)*/
Line1: p(1)
Line2: {
Line3: if (1》0)
Line4: { std::cout《《1《《“ “《《std::endl;
Line5: p(0);
Line6: p(0);
Line7: }
Line8: }
程序段3执行到第4行,新输出“1 ”,屏幕上显示“3 2 1 ”;
执行到第5行,进入函数p(0):
/*程序段4(k=0)*/
Line1: p(0)
Line2: {
Line3: if (0》0)
Line4: { std::cout《《0《《“ “《《std::endl;
Line5: p(-1);
Line6: p(-1);
Line7: }
Line8: }
程序段4执行到第3行,判断条件为假,不再往下执行,程序段3第5行的函数p(0)结束,程序段3继续执行第6行,又是函数p(0),同理,不输出任何东西,结束。
然后程序段3执行完毕,即程序段2第5行的函数p(1)结束,程序段2继续执行第6行,又进入函数p(1),输出“1 ”,屏幕上显示“3 2 1 1 ”……如此往复,直至p(3)执行完毕,即程序段1执行完毕。
最后结果为屏幕上显示:
3 2 1 1 2 1 1
同理,我们可以知道k=4的输出情况:
4 3 2 1 1 2 1 1 3 2 1 1 2 1 1
以及k=5的情况:
5 4 3 2 1 1 2 1 1 3 2 1 1 2 1 1 4 3 2 1 1 2 1 1 3 2 1 1 2 1 1

递归函数的介绍

在数理逻辑和计算机科学中,递归函数或μ-递归函数是一类从自然数到自然数的函数,它是在某种直觉意义上是可计算的 。事实上,在可计算性理论中证明了递归函数精确的是图灵机的可计算函数。递归函数有关于原始递归函数,并且它们的归纳定义(见下)建造在原始递归函数之上。但是,不是所有递归函数都是原始递归函数 — 最著名的这种函数是阿克曼函数。
其他等价的函数类是λ-递归函数和马尔可夫算法可计算的函数。 一个含直接或间接调用本函数语句的函数被称之为递归函数,在上面的例子中能够看出,它必须满足以下两个条件:
1) 在每一次调用自己时,必须是(在某种意义上)更接近于解;
2) 必须有一个终止处理或计算的准则。
例如:
梵塔的递归函数 //Cvoid hanoi(int n,char x,char y,char z){if(n==1)move(x,1,z);else{hanoi(n-1,x,z,y);move(x,n,z);hanoi(n-1,y,x,z);}}阶乘的递归函数,公式如下: //C++int Factorial(int n){if(n==0||n==1)return 1;elsereturn n * Factorial(n-1)}

c语言中,什么是函数的递归,能举个例子么

所谓递归,说的简单点,就是函数自己调用自己,然后在某个特定条件下。结束这种自我调用。
如果不给予这个结束条件,就成了无限死循环了。这样这个递归也就毫无意义了。
如下面问题
1 1 2 3 5 8 13 21 ........n
分析可以看出, i 表示第几个数, n 表示该数的值
当i = 1 时, n = 1;
当i = 2 时, n = 1;
当i = 3 时 n = i1 + i2;
当i = 4 时 n = i2 + i3
所以可以写个函数
int fun(int n) // 这里的n代表第几个数
{
if(1 == n || 2 == n) // 第一个数
{
return 1;
}
else
{
return fun(n - 1) + fun(n - 2); // 这里就是自己调用自己,形成循环自我调用。
}
}
注: 以上代码只是用来演示递归,不包含错误校验。
在实际生产过程中。该代码不够健壮。
如此,就完成了递归。你就可以求得第n个数了。
何时考虑使用递归。
当你分析一个问题的时候,发现这个问题,是一个自我循环时,而且这个自我循环到一个给定值,就可以终止的时候,你就快要考虑递归了。