1.
作业标题(682)
递归实现n的k次方
作业内容
编写一个函数实现n的k次方,使用递归实现。
参考代码为:
//编写一个函数实现n的k次方,使用递归实现
#include <stdio.h>
int hanshu(int n, int k)
{
int i = 0;
if (k <= 0)
return 1;
if (k >= 1)
return n * hanshu(n,k - 1);
}
int main()
{
int n = 0;
int k = 0;
scanf_s("%d %d", &n, &k);
printf("%d\n", hanshu(n,k));
return 0;
}
运行的结果为:
2.
作业标题(683)
计算一个数的每位之和(递归实现)
作业内容
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
输入:1729,输出:19
参考代码为:
//写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和.
//例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#include <stdio.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 a;
printf("请输入一个整数: ");
scanf_s("%d", &a);
printf("各位数之和为:%d\n", DigitSum(a));
return 0;
}
代码的运行结果为:
3.
作业标题(684)
字符串逆序(递归实现)
作业内容
编写一个函数 reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如:
char arr[] = "abcdef";
逆序之后数组的内容变成:fedcba
参考代码为:
#include<stdio.h>
void reverse_string(char* string)
{
if (*string != '\0')
{
string++;
reverse_string(string);
printf("%c", *(string - 1));
}
}
int main()
{
char string[] = "abcdef";
reverse_string(string);
printf("\n");
return 0;
}
代码的运行结果为:
4.
作业标题(685)
strlen的模拟(递归实现)
作业内容
递归和非递归分别实现strlen
参考代码为:
//递归和非递归分别实现strlen
//递归
#include <stdio.h>
#include <string.h>
int my_strlen(char* str)
{
if (*str != 0)
return 1 + my_strlen(str + 1);
else
return 0;
}
int main()
{
char arr[] = "abcdef";
int len = my_strlen(arr);//char*
printf("%d\n", len);
return 0;
}
//非递归
#include <stdio.h>
#include <string.h>
int my_strlen(char* str)
{
int count = 0; //临时变量
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "abcdef";
int len = my_strlen(arr);//char*
printf("%d\n", len);
return 0;
}
代码的运行结果为:
5.
作业标题(681)
计算斐波那契数
作业内容
递归和非递归分别实现求第n个斐波那契数
例如:
输入:5 输出:5
输入:10, 输出:55
输入:2, 输出:1
参考代码为:
递归方法:
//递归和非递归分别实现求第n个斐波那契数
//求第n个斐波那契数(递归)
#include <stdio.h>
int fib(int i)
{
if (i <= 2)
return 1;
if (i > 2)
return fib(i - 1) + fib(i - 2);
}
int main()
{
int i = 0;
scanf_s("%d", &i);
printf("%d\n", fib(i));
return 0;
}
非递归方法为:
//求第n个斐波那契数(非递归)
#include <stdio.h>
int fib(int n)
{
int a = 1;
int b = 1;
int c = 1;
while (n > 2)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int i = 0;
scanf_s("%d", &i);
printf("%d\n", fib(i));
return 0;
}
代码的运行结果为: