递归

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值