1.递归和非递归分别实现求第n个斐波那契数。
非递归
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
int n;
printf("请输入你要求的是第几个数:");
scanf("%d", &n);
int* arr = (int *)malloc(sizeof(int) * n);//动态分布内存
for (int i = 2; i < n; i++) {
arr[0] = 1;
arr[1] = 1;
arr[i] = arr[i - 1] + arr[i - 2];
}
printf("%d", arr[n - 1]);
system("pause");
return 0;
}
递归
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Fib(int n) {
if (n == 1|| n == 2) {
return 1;
}
return Fib(n - 1) + Fib(n - 2);
}
int main() {
printf("%d", Fib(9));
system("pause");
return 0;
}
2.编写一个函数实现n^k,使用递归实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Power(int n, int k) {
if (k == 1) {
return n;
}
return n * Power(n,k - 1);
}
int main() {
printf("%d",Power(3,3) );
system("pause");
return 0;
}
- 写一个递归函数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 m;
if (n < 10) {
return n;
}
if (n >= 10) {
return(n % 10 + DigitSum(n / 10));
}
}
int main() {
int result=0;
scanf("%d", &result);
printf("%d\n", DigitSum(result));
system("pause");
return 0;
}
- 编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
#include<stdio.h>
#include<stdlib.h>
void reverse_string(char * string)
{
if (*string == '\0')
printf("%c", *string);
else
{
reverse_string(++string); //输出下一个字符
printf("%c", *(--string)); //因为string已经执行完++,所以若要输出当前字符得--
}
}
int main()
{
char s[] = "abcdefgh";
reverse_string(s);
system("pause");
return 0;
}
5.递归和非递归分别实现strlen
#include<stdio.h>
#include<stdlib.h>
//非递归表示 strlen
int Strlen(char str[]) {
int size = 0;
for (int i = 0; str[i] != '\0'; i++) {
size++;
}
return size;
}
//递归表示 strlen
int Strlen2(char str[]) {
if (str[0] == 0) {
return 0;
}
return 1 + Strlen2(str + 1);
}
int main() {
char str[] = "hehe";
printf("%d", Strlen2(str));
system("pause");
return 0;
}
6.递归和非递归分别实现求n的阶乘
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Factorial(int n) {
if (n == 1) {
return 1;
}
return n * Factorial(n - 1);
}
int main() {
int n;
printf("请输入要求的数\n");
scanf("%d", &n);
printf("%d\n", Factorial(n));
system("pause");
return 0;
}
非递归以前写过- -
7.递归方式实现打印一个整数的每一位
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Print(int n) {
if (n > 10) {
Print(n / 10);
}
printf("%d ", n % 10);
}
int main() {
Print(1987);
system("pause");
return 0;
}