[C语言]函数递归
Posted Huang_ZhenSheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C语言]函数递归相关的知识,希望对你有一定的参考价值。
目录
1:接收一个整形值(无符号),按照顺序打印他的每一位
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void print(int n)
{
if (n > 9)
{
print(n / 10);
}
printf(" %d", n % 10);
}
int main()
{
int num = 0;
scanf("%u", &num);
print(num);
return 0;
}
运行结果:
2: 编写函数不允许创建临时变量,求字符串的长度
普通的方法:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int my_strlen(char* str)
{
int count = 0;
while (*str != '\\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "bit";
printf("%d\\n", my_strlen(arr));
return 0;
}
函数递归方法:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int my_strlen(char* str)
{
if (*str != '\\0')
return 1 + my_strlen(str + 1);
else
return 0;
}
int main()
{
char arr[] = "bit";
printf("%d\\n", my_strlen(arr));
return 0;
}
运行结果:
3:求n的阶层(不考虑溢出)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int Fac(int n)
{
if (n <= 1)
return 1;
else
return n*Fac(n - 1);
}
int main()
{
int n = 0;
scanf("%d",&n);
int ret = Fac(n);
printf("%d\\n",ret);
return 0;
}
运行结果:
4:求第n个斐波那契数(不考虑溢出)
方法1:效率太低—重复大量计算
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//#include<string.h>
int Fib(int n)
{
if (n <= 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int n = 0;
scanf("%d",&n);
int ret = Fib(n);
printf("%d\\n",ret);
return 0;
}
方法2:(不考虑栈溢出)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
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;
}
int main()
{
int n = 0;
scanf("%d",&n);
int ret = Fib(n);
printf("%d\\n",ret);
return 0;
}
以上是关于[C语言]函数递归的主要内容,如果未能解决你的问题,请参考以下文章