24、以下代码中,当n=2时,代码输出结果是多少?
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int fun(int n)
{
if (n == 5)
return 2;
else
return 2 * fun(n + 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int M = fun(n);
printf("%d",M);
return 0;
}
25、字符串逆序(递归):编写一个函数reverse_string(char* string),实现:将参数字符串中的字符反向排列,不是递归打印。如:char arr[]="abcdef",逆序之后:fedcba.
答案:
24、结果:16.
当输入值为2时,函数fun的递归调用如下:
fun(2) 返回 2 * fun(3)
fun(3) 返回 2 * fun(4)
fun(4) 返回 2 * fun(5)
fun(5) 返回 2
因此,fun(2) 的返回值为 2 * 2 * 2 * 2 = 16。
25、递归:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
{
char tmp = *str;
int len = my_strlen(str);
*str = *(str + len - 1);
*(str + len - 1) = '\0';
if (my_strlen(str + 1) >= 2)
{
reverse_string(str + 1);
}
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
循环:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
{
int len = my_strlen(str);
char* start = str;
char* end = str + len - 1;
char tmp;
while (end > start)
{
tmp = *end;
*end-- = *start;
*start++ = tmp;
}
printf("%s\n", str);
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
{
int left = 0;
int right = my_strlen(str) - 1;
while (left < right)
{
char tmp = str[left];
str[left] = str[right];
str[right] = tmp;
left++;
right--;
}
//str[my_strlen(str)] = '\0';
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse_string(char* str)
{
int left = 0;
int right = my_strlen(str) - 1;
while (left < right)
{
char tmp = *(str + left);
* (str + left) = *(str + right);
*(str + right) = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}