C 中的递归

C 递归

递归指的是在函数的定义中使用函数自身的方法。

举个例子:
从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’”

语法格式如下:

void recursion()
{
   statements;
   ... ... ...
   recursion(); /* 函数调用自身 */
   ... ... ...
}
 
int main()
{
   recursion();
}

C 中的递归_第1张图片
C 语言支持递归,即一个函数可以调用其自身。但在使用递归时,程序员需要注意定义一个从函数退出的条件,否则会进入死循环。

递归函数在解决许多数学问题上起了至关重要的作用,比如计算一个数的阶乘、生成斐波那契数列,等等。

斐波那契数列

波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

数学递推表示:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N)

核心代码突破点:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N)

问题:求第n项斐波那契数列

输入:输入一个整数n,代表斐波那契数列的第n项(0≤n≤20)

输出:输出一个整数,代表斐波那契数列第n项值
样例:

输入:3

输出:2

递归实现:

#include 
int fibonacci(int n) 
{  
   if(n <= 2)  
     {  return 1;  }  
else  
     {      return fibonacci(n - 1) + fibonacci(n - 2);     } 
}
 int main()
{  int n;//第n项  
   scanf("%d", &n); 
   printf("%d\n", fibonacci(n));//第n项斐波那契数列的值  
   return 0; 
}

自然也可以借助循环等实现,在这就不在多加陈述。

求n的阶乘

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。

核心代码突破点:

大于等于:

任何大于等于1 的自然数n 阶乘表示方法:

n!=1×2×3×…×(n-1)×n

n!=n×(n-1)!

0的阶乘:

0!=1。

问题:求n的阶乘

输入:输入一个整数n(0≤n≤10)

输出:输出一个数,表示n的阶乘

样例:

输入:5

输出:120

#include
int Fact(int n)//递归函数  
{     
    if( n <= 1)     
       {    return 1;     }  
    return n * Fact(n - 1);
}
int main()//主函数  
{     
    int n;//阶乘数      
    scanf("%d", &n);     
    printf("%d\n", Fact(n));     
    return 0; 
}

打印一个整数每一位

问题:输出一个整数的每一位

输入:输入一个整数a(大小在int数据范围内)

输出:输出每一位并用空格隔开

样例:

输入:13579

输出:1 3 5 7 9

#include
void Prt(int a)//递归函数
{     
     if(a > 9)         
        Prt(a / 10);   //单个语句将{}省略     
     printf("%d ", a % 10); 
} 
int main()//主函数  
{     
    int a ;
​    scanf("%d",&a);
​    Prt(a); ​   
    printf("\n"); ​   
    return 0; 
}

你可能感兴趣的:(c语言,算法,开发语言)