1,斐波那契数
a: 递归
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int func(int n) {
if (n < 3)
return 1;
else
return func(n - 1) + func(n - 2);
}
int main() {
int n;
scanf("%d", &n);
int func(int n);
printf("%d\n", func( n));
system("pause");
return 0;
}
b:不使用递归
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Stdlib.h>
int func(int n) {
int c = 0;
int f1 = 1;
int f2 = 1;
if (n < 3) {
return 1;
}
else {
for (int i = 3; i <= n; i++) {
c = f1 + f2;
f1 = f2;
f2 = c;
}
return c;
}
}
int main() {
int n;
scanf("%d", &n);
int func(n);
printf("%d\n", func( n));
system("pause");
return 0;
}
2.编写一个函数实现n^k,使用递归实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Stdlib.h>
int func(int n,int k) {
if (k = 1) {
return n;
}
if (k > 1) {
return n * func(n, --k);
}
}
int main() {
int n,k;
printf("请输入计算n的几次方\n");
scanf("%d %d", &n, &k);
int num= func(n,k);
printf("%d\n", num);
system("pause");
return 0;
}
- 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
DigitSum(n) {
int num = 0;
int k;
if (n != 0) {//当n为个位数时,递归结束
k = n % 10;
num= k + DigitSum(n/10);
}
return num;
}
int main() {
int n;
scanf("%d", &n);
printf("%d\n",DigitSum (n));
system("pause");
return 0;
}
4.编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
5.递归和非递归分别实现strlen
#include<stdio.h>
#include<stdlib.h>
strlen(char* string) {
if (*string == '\0')
return 0;
else
return 1 + strlen(string + 1);
}
strlen_(char* string) {
int count = 0;
while (*string++) {
count++;
}
return count;
}
int main() {
char* string = "haohaoxuexi" ;
printf("递归求得:%d\n", strlen(string));
printf("非递归求得:%d\n", strlen_(string));
system("pause");
return 0;
}
6.递归和非递归分别实现求n的阶乘
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int factorial(int n) {
if (n > 0)
return n * factorial(n - 1);
else
return 1;
}
int factorial_(int n) {
int n;
scanf("%d", &n);
int num = 0;
int i = 1;
while (i <= n) {
num = 1 * i;
}
return num;
}
int main() {
int n;
scanf("%d", &n);
printf("递归求得:%d\n", factorial(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) != 0) {
print(n / 10);
}
printf("%d ", n % 10);
}
int main() {
int n;
scanf("%d", &n);
print(n);
system("pause");
return 0;
}