C语言一招教你搞定所有基础函数知识(中)

9.函数递归

9.1递归的定义

递归是什么?递就是递推,回就是回归,递推到结束,回归到开始,说白了就是函数自己调用自己,开始到结束调用,结束到开始调用。

#include 
int main()
{
 printf("hehe\n");
 main();//main函数中⼜调⽤了main函数
 return 0;
}

这个代码只是为了演示递归的基本形式,不是为了解决问题,最终会栈溢出。

9.2如何进行递归

递归的时候就是把一个大问题拆成好多个小问题,进行计算,然后再依赖小问题的结果回归到大问题函数的本身。

9.3 递归的限制条件

• 递归存在限制条件,当满⾜这个限制条件的时候,递归便不再继续。
• 每次递归调⽤之后越来越接近这个限制条件。

9.4递归举例

举例1:求n的阶乘

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

n ! = n ∗ ( n − 1 ) ! n! = n ∗ (n − 1)! n=n(n1)!
n的阶乘递归公式如下:
C语言一招教你搞定所有基础函数知识(中)_第1张图片

#include 
int Fact(int n)
{
 if(n==0)
 return 1;
 else
 return n*Fact(n-1);
}
int main()
{
 int n = 0;
 scanf("%d", &n);
 int ret = Fact(n);
 printf("%d\n", ret);
 return 0;
}

举例2:顺序打印⼀个整数的每⼀位

输⼊⼀个整数m,打印这个按照顺序打印整数的每⼀位 。

1234%10就能得到4,然后1234/10得到123,这就相当于去掉了4 然后继续对123%10,就得到了3,再除10去掉3,以此类推 不断的 %10 和 /10 操作,直到1234的每⼀位都得到。

void Print(int n)
{
 if(n>9)
 {
 Print(n/10);
 }
 printf("%d ", n%10);
}
int main()
{
 int m = 0;
 scanf("%d", &m);
 Print(m);
 return 0;
}

9.5递归与迭代

举例3:求第n个斐波那契数

int Fib(int n)
{
 if(n<=2)
 return 1;
 else
 return Fib(n-1)+Fib(n-2);
}

#include 
int main()
{
 int n = 0;
 scanf("%d", &n);
 int ret = Fib(n);
 printf("%d\n", ret); 
 return 0;
 }
int Fib(int n)
{
 int a = 1;
 int b = 1;
 int c = 1;
 while(n>2)
 {
 c = a+b;
 a = b;
 b = c;
 n--;
 }
 return c;
}

你可能感兴趣的:(C语言初阶,c语言,开发语言)