递归应用 求第n个斐波那契数 实现n^k 输入一个非负整数,返回组成它的数字之和等等

递归可以使得在代码上更简洁明了。

头文件

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>

递归和非递归分别实现求第n个斐波那契数。

斐波那契数指的是这样一个数列:1、1、2、3、5、8、13、21、34、……

int  Fbnq(int num)
{
	//递归方法
	//if (num == 1||num == 2)
	//{
	//	return 1;
	//}
	//return Fbnq(num - 1) + Fbnq(num - 2);
	//非递归方法
	int num1 = 1;
	int num2 = 1;
	int tep = 0;
	if (num <= 2)
	{
		return 1;
	}
	else
	{
		for (int i = 2; i < num; i++)
		{
			tep = num1 + num2;
			num1 = num2;
			num2 = tep;
		}
		return tep;
	}

}
{
    int n = 0;
	printf("请输入一个数");
	scanf("%d", &n);
	printf("%d ",Fbnq(n));
	system("pause");
	return 0;
}

编写一个函数实现n^k,使用递归实现

int Power(int x,int y)
{
	if (x > 0 && y == 0)
	{
		return 1;
	}
	if (x == 0 && y > 0)
	{
		return 0;
	}
	if (x > 0 && y > 0)
	{
		return x*Power(x, y - 1);
	}
}
int main()
{
	int n = 0;
	int k = 0;
	printf("请输入一个数-> ");
	scanf("%d", &n);
	printf("请输入次幂-> ");
	scanf("%d", &k);
	printf("%d\n ",Power(n,k));
	system("pause");
	return 0;
}

写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
//例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19

int DigitSum(int x)
{           
	if (x < 10)
	{
		return x;
	}
	return DigitSum(x / 10) + DigitSum(x % 10);
}
int main()
{
	int n = 0;
	printf("请输入一个数-> ");
	scanf("%d", &n);
	printf("%d ",DigitSum(n));
	system("pause");
	retu

编写一个函数 reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列。

void reverse_string(char* string)
{                              
	if (*string != '\0')
	{
		 reverse_string(string + 1);
	}
	printf("%c",*string );

}
int main()
{
	char a[] = "abcd";
	 reverse_string(a);
	system("pause");
	return 0;
}

递归和非递归分别实现strlen

int Strlen(char* string)
{
	//递归方法
	/*if (*string == '\0')
	{
		return 0;
	}
	return 1 + Strlen(string + 1);*/
	//非递归方法
	int a = 0;
	while(*string !='\0')
	{
		*string++;
		a++;
	}
	return a;
}
int main()
{
	char a[] = "abcd";
	printf("%d ",Strlen(a));
	system("pause");
	return 0;
}

递归和非递归分别实现求n的阶乘

int Fctorial(int x)
{
	//递归方法
	//if (x == 0 || x == 1)
	//{
	//	return x;
	//}
	//return x*Fctorial(x - 1);
	//非递归方法
	int a = 1;
	for (int i = 1; i <= x; i++)
	{
		a = a*i;
	}
	return a;
}
int main()
{
	int n = 0;
	printf("请输入一个数-> ");
	scanf("%d", &n);
	printf("%d ",Fctorial(n));
	system("pause");
	return 0;
}

递归方式实现正序打印一个整数的每一位

void Printf_num(int x)
{
	if (x > 9)
	{
		Printf_num(x/10) ;
	}
	printf("%d ", x % 10);
}
int main()
{
	int n = 0;
	printf("请输入一个数-> ");
	scanf("%d", &n);
	Printf_num(n);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/be_gin_ner/article/details/85238634