[C语言]函数递归

Posted Huang_ZhenSheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C语言]函数递归相关的知识,希望对你有一定的参考价值。

目录

接收一个整形值(无符号),按照顺序打印他的每一位

编写函数不允许创建临时变量,求字符串的长度

求n的阶层(不考虑溢出)

求第n个斐波那契数(不考虑溢出)


 

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语言]函数递归的主要内容,如果未能解决你的问题,请参考以下文章

C语言函数递归(详解)

JavaSE 方法的使用

C语言 尾递归

Java基础之方法的调用重载以及简单的递归

C语言笔记初级篇第三章:函数与递归

C语言笔记初级篇第三章:函数与递归