递归

来源:互联网 发布:ps修复软件下载 编辑:程序博客网 时间:2024/06/07 17:19

1.编写一个函数实现n^k,使用递归实现
2. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
3. 编写一个函数reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中
的字符串操作函数。
4.不创建临时变量求字符串长度。
5.递归和非递归实现求n的阶乘
6.递归和非递归实现求第n个斐波那契数。

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>//1.编写一个函数实现n^k,使用递归实现//int power(int n,int k)//{//  if (k == 0)//  {//      return 1;//  }//  else//  {//      return n*power(n, k - 1);//  }//}////void main()//{//  int n = 0;//  int k = 0;//  scanf("%d%d", &n,&k);//  printf("%d^%d=%d\n",n,k,power(n,k));//}//2. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和//例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19//int DigitSum(int n)//{//  if (n > 9)//  {//      printf("%d+", n % 10);//      return n % 10 + DigitSum(n / 10);//  }//  else//  {//      printf("%d=",n);//      return n;//  }////}//void main()//{//  int n = 1729;//  scanf("%d", &n);//  printf("%d",DigitSum(n));//}//3. 编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。//要求:不能使用C函数库中的字符串操作函数。//void reverse_string(char * string)//{//  if (*string == '\0')//  {//      printf("%c",*string);//  }//  else//  {//      reverse_string(++string);//      printf("%c", *(--string));//  }//}////void main()//{//  char *p = "adcd";//  reverse_string(p);//}//4.不创建临时变量求字符串长度。//int len(char* p)//{//  if (*p == '\0')//  {//      return 0;//  }//  else//  {//      return len(p + 1) + 1;//  }//}////void main()//{//  int *p = "abcd";//  printf("%d", len(p));//}//5.递归和非递归实现求n的阶乘//递归//int Factorial(int n)//{//  if (n > 0)//  {//      return n*Factorial(n - 1);//  }//  else//  {//      return 1;//  }//}////void main()//{//  int n = 0;//  scanf("%d", &n);//  printf("%d!=%d\n",n,Factorial(n));//}//非递归//int F_Factorial(int n)//{//  int sum = 1;//  while (n > 1)//  {//      sum = sum*n;//      --n;//  }//  return sum;//}//void main()//{//  int n = 0;//  scanf("%d", &n);//  printf("%d", F_Factorial(n));//}//6.递归和非递归实现求第n个斐波那契数。#include<assert.h>//递归int Fibonacci(int n){    assert(n);    if (n < 3)    {        return 1;    }    else    {        return Fibonacci(n - 1) + Fibonacci(n - 2);    }}//非递归void F_Fibonacci(int n){    int k1 = 1;    int k2 = 1;    int k3 = 0;    assert(n);    if (n > 2)    {        n = n - 2;        while (n > 0)        {            k3 = k1 + k2;            k1 = k2;            k2 = k3;            --n;        }        printf("%d\n", k3);    }    else    {        printf("1\n");    }}void main(){    int n = 0;    scanf("%d", &n);    printf("%d\n", Fibonacci(n));    F_Fibonacci(n);}