day 10_18

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//非递归实现
int fib1(int n)
{
	long num = 0;
	int num1 = 1;
	int num2 = 1;
	if (n <= 2)
	{
		return num1;
	}
	while (n > 2)
	{
		num = num1 + num2;
		num1 = num2;
		num2 = num;
		n--;
	}
	return num;
}
//递归的方式
int fib2(int n)
{

	if (n <= 2)
	{
		return 1;
	}
	else
	{
		return fib2(n - 1) + fib2(n - 2);
	}
}
int main()
{	
	int n = 0;
	printf("请输入n:");
	scanf("%d", &n);
	printf("%d\n", fib2(n));
	system("pause");
	return 0;
}

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int mypow(int n,int k)
{
	int num = 0;
	if (k == 0)
	{
		return 1;
	}
	else if (k == 1)
	{
		return n;
	}
	else
	{
		return n*mypow(n, k - 1);
	}
}
int main()
{
	int x = 0;
	int y = 0;
	printf("请输入底数和指数:");
	scanf("%d%d", &x, &y);
	printf("%d\n", mypow(x, y));
	system("pause");
	return 0;
}
  1. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
    例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int DigitSum(int n)
{
	int sum = 0;
	int m = 0;
	if (n != 0)
	{
		m = n % 10;
		n = n / 10;
		sum = m + DigitSum(n);
	}
	return sum;
}
int main()
{
	int num = 0;
	printf("请输入一个数字:");
	scanf("%d", &num);
	printf("%d\n", DigitSum(num));
	system("pause");
	return 0;
}
  1. 编写一个函数 reverse_string(char * string)(递归实现)
    实现:将参数字符串中的字符反向排列。
    要求:不能使用C函数库中的字符串操作函数。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
char reverse_string(char* arr)
{
	if (*arr == '\0')
	{
		printf("%c", *arr);
	}
	else
	{
		reverse_string(++arr);
		printf("%c", *(--arr));
	}
}
int main()
{
	char arr[10] = { "" };
	printf("请输入字符串(不超过10位):");
	scanf("%s", &arr);
	reverse_string(arr);
	printf("\n");
	system("pause");
	return 0;

}

5.递归和非递归分别实现strlen

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//递归
int mystrlen1(char *arr)
{
	int count = 0;
	if (*arr != '\0')
	{
		arr++;
		count = 1 + mystrlen1(arr);
	
	}
	return count;
}
//非递归
int mystrlen2(char* arr)
{
	int count = 0;
    while (*arr)
	{
		count++;
		arr++;
	}
	return count;
}

int main()
{
	char arr[]= {"abcdefgh"};
	printf("%d\n", mystrlen2(arr));
	system("pause");
	return 0;
}

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//非递归
int fac(int n)
{
	int i = 1;
	int sum = 1;
	if (n == 0)
	{
		return 1;
	}
	for (i = 1; i <= n; i++)
	{
		sum = sum * i;
	}
	return sum;
}
//递归
int fac1(int n)
{
	int i = 1;
	int sum = 1;
	if (n == 0 || n == 1)
	{
		return sum;
	}
	else
	{
		return(n * fac1(n - 1));
	}
}
int main()
{
	int n = 0;
	printf("请输入一个数字:");
	scanf("%d", &n);
	printf("%d! = %d\n",n,fac1(n));
	system("pause");
	return 0;
}

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int myprint(int n)
{
	if (n > 9)
	{
		myprint(n / 10);
	}
	printf("%d  ", n % 10);
}
int main()
{
	int n = 0;
	printf("请输入一个整数:");
	scanf("%d", &n);
	myprint(n);
	printf("\n");
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/busybox1587/article/details/83150113