递归简单来说就是函数自己调用自己。
特点:一般代码比较简洁,没有出口。
例子1:用一个函数计算阶乘
#include<stdio.h>
//不用递归
int fac(int n)
{
int val = 1;
for (int i = 1; i <=n;i++)
{
val *= i;
}
return val;
}
//用递归
int fac1(int n)
{
if (n == 1)
{
return 1;
}
return n * fac1(n - 1);
}
int main()
{
printf("%d\n", fac(5));
printf("%d\n", fac1(5));
return 0;
}
例子2:斐波那契值
#include<stdio.h>
//1 2 3 4 5 6 7 8 从第三个数开始,它的值等于它前两项的和
//1 1 2 3 5 8 13 21
//用递归
int fibonacci(int n)
{
if (n == 1 || 2 == n)
{
return 1;
}
return fibonacci(n - 2) + fibonacci(n - 1);
}
//循环法
int fibo(int n)
{
if (1 == n || 2 == n)
{
return 1;
}
int v1 = 1;
int v2 = 1;
int v3;
for (int i=3;i<=n;i++)
{
v3 = v1 + v2;
v1 = v2;
v2 = v3;
}
return v3;
}
int main()
{
printf("%d\n", fibo(40));
printf("%d\n", fibonacci(40));
return 0;
}
例子3:倒序打印
#include<stdio.h>
void print(char* str)//abcd dcba倒序打印
{
if (*str == '\0')
{
return;
}
print(str + 1); //printf("%c", *str);此为正打印
printf("%c", *str); //print(str + 1); abcd abcd
}
int main()
{
print("abcd");
return 0;
}
标签:abcd,return,递归,int,C语言,str,print
From: https://blog.csdn.net/2301_80311224/article/details/141327999