【C语言初阶练习题-递归函数】递归计算斐波那契数,递归实现n的k次方,递归实现一个数的每位之和,递归实现字符串逆序,递归实现strlen的模拟,递归求阶乘,递归方式实现打印一个整数的每一位

目录

  • 递归计算斐波那契数
  • 递归实现n的k次方
  • 递归实现一个数的每位之和
  • 递归实现字符串逆序
  • 递归实现strlen的模拟
  • 递归求阶乘
  • 递归方式实现打印一个整数的每一位

递归计算斐波那契数

// 求第n个斐波那契 递归
 //1 1 2 3 5 8 13 21
int Fib(int n)
{
   if (n<=2)
      return 1;
   else
      return Fib(n - 1) + Fib( n - 2);
}
//非递归
int Fib(int n)
{
   int a = 1;
   int b = 1;
   int c = 1;
   while (n >= 3)
   {
      c = a + b;
      a = b;
      b = c;
      n--;
   }
   return c;
}

int main()
{
   int n;
   scanf("%d", &n);
   int ret = Fib(n);
   printf("%d\n",ret);
   
   return 0;
}

递归实现n的k次方

思路:Pow(n,k)有三种情况
1.k > 0     n * Pow(n,k-1)
2.k = 0     1
3.k < 0      1.0/Pow(2,-k)
double Pow(int n,int k)
{
   if (k > 0)
      return n * Power(n, k - 1);
   else if
      return 1;
   else
   	  return 1.0/Pow(n,-k);
}

int main()
{
   int n = 0;
   int k = 0;
   scanf("%d %d", &n,&k);
   int ret = Pow(n,k);
   printf("%d\n", ret);

   return 0;
}

递归实现一个数的每位之和

思路:写一个函数DigitSum(n)
DigitSum(1729)
DigitSum(172) +9
DigitSum(17)+2 +9
DigitSum(1)+7+2 +9

int DigitSum(unsigned int n)
{
   if (n > 9)
   {
      DigitSum(n / 10);
      return DigitSum(n / 10) + n % 10;
   }
   else
      return n;
}

int main()
{
   unsigned int n = 0;
   scanf("%d", &n);
   int ret = DigitSum(n);
   printf("%d", ret);
   return 0;

}

递归实现字符串逆序

编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。

#include 
#include 
//非递归
//void reverse_string(char s[])
//{
	//size_t len = strlen(s);
	//size_t left = 0;
	//size_t right = len - 1;
	//while (left
	//{
	//	char tmp = s[left];
	//	s[left] = s[right];
	//	s[right] = tmp;
	//	left++;
	//	right--;
	//}
//}
//递归
void reverse_string(char s[])
{
	size_t len = strlen(s);
	char tmp = s[0];
	s[0] = s[len - 1];
	s[len - 1] = '\0';
	if (strlen(s+1)>=2)
		reverse_string(s + 1);
	s[len - 1] = tmp;
}

int main()
{
	char arr[] = "abcdef";
	reverse_string(arr);
	printf("%s\n", arr);

	return 0;
}

递归实现strlen的模拟

size_t My_strlen(char* str)
{
   if (*str == '\0')
      return 0;
   else
      return 1 + My_strlen(str+1);
}
//非递归
//size_t My_strlen(char* str)
//{
//   size_t count = 0;
//   while (*str != '\0')
//   {
//      count++;
//      str++;
//   }
//   return count;
//}
int main()
{
   char arr[] = "abc";
   size_t len = My_strlen(arr);
   printf("%zd\n", len);

   return 0;
}

递归求阶乘

#include 
//递归
//int Fac(int n)
//{
//   if (n <= 1)
//      return 1;
//   else
//      return n* Fac(n - 1);
//}
int Fac(int n)
{
   int i = 0;
   int x = 1;
   for ( i = 1; i <= n; i++)
   {
      x = i * x;
   }
   return x;
}
int main()
{
   int n = 0;
   scanf("%d", &n);
   int ret = Fac(n);
   printf("%d\n", ret);

   return 0;
}

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

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

}

你可能感兴趣的:(C语言经典题(初级),c语言)