递归

来源:互联网 发布:k60单片机特点 编辑:程序博客网 时间:2024/06/08 06:06
#include<stdio.h>
#include<assert.h>
#include<string.h>
//编写一个函数实现n^k,使用递归实现
int Kfactorial(int n)
{
 if (n <= 1)
  return 1;
 else
  return n*Kfactorial(n - 1);
}
int main()
{
 printf("%d\n", Kfactorial(7));
 return 0;
}
//2. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字
//之和,例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19
int  DigitSum(int n)
{
 if (n > 9)
 {
  DigitSum(n / 10);
 }
 int sum = n % 10;
 sum += sum ;
 return sum;
}
int main()
{
 printf("%d\n", DigitSum(1729));
 return 0;
}
//3. 编写一个函数reverse_string(char * string)(递归实现)
//实现:将参数字符串中的字符反向排列。
//要求:不能使用C函数库中
//的字符串操作函数。
void reverse_string(char * string)
{
 if (*string == '\0')
 {
  printf("%c", *string);
 }
 else
 {
  ++string;
  reverse_string(string);
  --string;
  printf("%c", *(string));
 }
}
int main()
{
 char s[] = "abcdef";
 reverse_string(s);
 printf("\n");
 return 0;
}
//4.不创建临时变量求字符串长度。
int my_strlen(const char* str)
{
 if (*str)
 {
  return 1 + my_strlen(str + 1);
 }
 else
  return 0;
}
int main()
{
 char s[] = "abcdefg";
 int len = 0;
 len = my_strlen(s);
 printf("%d\n", len);
 return 0;
}
//5.递归和非递归实现求n的阶乘
int fac1(int n)          //非递归
{
 if (n == 0 || n == 1)
 {
  return 1;
 }
 else
 {
  int sum = 1;
  for (int k = n; k > 1; --k)
  {
   sum *= k;
  }
  return sum;
 }
}
int fac2(int n)              //递归
{
 if (n <= 1)
  return 1;
 else
  return n*fac2(n - 1);
}
int  main()
{
 int num = 4;
 //printf("%d\n", fac1(num));
 printf("%d\n", fac2(num));
 return 0;
}
//6.递归和非递归实现求第n个斐波那契数。
int Fabe1(int n)   //非递归
{
 int i = 0;
 int j = 1;
 int sum = 0;
 for (int k = 2; k < n + 1; k++)
 {
  sum = i + j;
  i = j;
  j = sum;
 }
 return sum;
}
int Fabe2(int n)      //递归
{
 if (n <= 2)
  return 1;
 else
     return Fabe2(n - 1) + Fabe2(n - 2);
}
int main()
{
 int m = 8;
 //printf("%d\n", Fabe1(m));
 printf("%d\n", Fabe2(m));
 return 0;
}

原创粉丝点击