1.递归和非递归分别实现求第n个斐波那契数。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(){
int x;
scanf("%d",&x);
printf("%d", fib(x));
system("pause");
return 0;
}
int fib(int n){
if (n == 1 || n == 2){
return 1;
}
else{
return fib(n - 1) + fib(n - 2);
}
}
非递归
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(){
int x;
int a[100];
a[0] = 1;
a[1] = 1;
scanf("%d", &x);
for (int i = 2; i <= x; i++){
a[i] = a[i - 1] + a[i - 2];
}
printf("%d", a[x-1]);
system("pause");
return 0;
}
2.编写一个函数实现n^k,使用递归实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main(){
int n, k;
scanf("%d%d", &n, &k);
printf("%d", mi(n, k));
system("pause");
return 0;
}
int mi(int x,int y){
if (y == 0){
return 1;
}
else{
return pow(x, y - 1)*x;
}
}
3.写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int DigitSum(int n){
if (n<0){
return 0;
}
else if (n>0 && n < 9){
return n;
}else
return (n % 10) + DigitSum(n / 10);
}
main(){
int x;
int sum = 0;
scanf("%d", &x);
printf("%d", DigitSum(x));
system("pause");
return 0;
}
4. 编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中的字符串操作函数。
#include <stdio.h>
void reverse_string(char * str)
{
int n = 0; //创建一个变量来记录字符串的长度
char* p = str; // str并不会发生改变
char tmp;
while (*p++ != '\0')
{
n++;
}
if (n > 1)
{
tmp = str[0];
str[0] = str[n - 1];
str[n - 1] = '\0';
reverse_string(str + 1);
str[n - 1] = tmp;
}
}
void main()
{
char string[] = "abcd";//char* a 为字符串常量 在静态区 具有只读属性 不可修改
reverse_string(string);
printf("%s\n", string);
system("pause");
}
5.递归和非递归分别实现strlen
#include<stdio.h>
#include <stdlib.h>
int main(){
char *str="sdasdasd";
printf("%d\n", mystrlen(str));
printf("%d", mystrlen1(str));
system("pause");
return 0;
}
int mystrlen(char* p){
if (*p == '\0'){
return 0;
}
else{
return 1 + mystrlen(p + 1);//递归
}
}
int mystrlen1(char* p1){
int count = 0;
while (*p1) //非递归
{
p1++;
count++;
}
return count;
}
6.递归和非递归分别实现求n的阶乘
#include<stdio.h>
#define N 4 //N的阶乘
int main(){
printf("%d\n", jiecheng(N));
printf("%d\n", jiecheng1(N));
system("pause");
return 0;
}
int jiecheng(int x){
int sum = 1;
for (int i = 1; i < x; i++){ //非递归
sum *= (i + 1);
}
return sum;
}
int jiecheng1(int x){
if (x==0){
return 1;
}
else {
return x*jiecheng1(x - 1);//递归
}
}
7.递归方式实现打印一个整数的每一位
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(){
int num;
printf("请输入一个整数:\n");
scanf("%d", &num);
print(num);
system("pause");
return 0;
}
int print(int x){
if (x > 9){
print(x / 10);
}
printf("%d ", x % 10);
}