在调用函数的时候,真实传递给函数的是实参,函数定义部分函数名后的参数是形参。
形参和实参的名字是可以相同的,在函数调用的时候,形参是实参的一份临时拷贝,分别占用不同的内存空间,所以A正确,B错误,即使形参和实参的名字相同,也是占用不同的内存空间,所以B错误;
函数如果不被调用时,函数的形参是形式上存在的,但是函数在被调用的时候,形参是要分配内存空间的,所以D错误。
void print(char* s)
{if(*s){print(++s);//这里是递归printf("%c", *s);}
}int main()
{char str[] = "Geneius";print(str);//suienereturn 0;
}
代码实现了递归倒序打印字符串的功能,但是++s使得s的值发生了变化,回不到’G’的位置上,故而没有打印’G
int fun(int x)
{return (x==1) ? 1 : (x + fun(x-1));
}
求f(10) = 55
代码是一个递归函数,计算x+(x-1)+(x-2)+…+2+1即等差数列的和
图片整理
题目来源
#include <stdio.h>int main() {char a[1111] = {0};scanf("%s",a);int ax[1111] = {0};int i = 0;int j = 0;int key = strlen(a);for(i=0;a[i]!='\0';i++){ax[i] = (int)a[i];}for(i=0;i<key-1;i++){for(j=0;j<key-i-1;j++){if(ax[j]>ax[j+1]){int temp = ax[j];ax[j] = ax[j+1];ax[j+1] = temp;}}}for(i=0;i<key;i++){printf("%c",ax[i]);}return 0;
}
#include <stdio.h>int main() {char str[1024] = {0};while (gets(str)) {int len = strlen(str);for (int i = 0; i < len; i++) {for (int j = 0; j < len - i - 1; j++) {if (str[j] > str[j + 1]) {char ch = str[j + 1];str[j + 1] = str[j];str[j] = ch;}}}printf("%s\n", str);}return 0;
}
寻找数组的中心下标
题目来源
给你一个整数数组 nums ,请计算数组的 中心下标 。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。
如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。
从数组的0下标处开始向后逐下标统计,计算当前下标左边之和,和右边之和,进行判断,相等则为中心下标,如果数组循环结束都没有找到中心下标,则返回-1,表示没有中心下标。
int pivotIndex(int* nums, int numsSize) {int i, j;for (i = 0; i < numsSize; i++) {//从假设中心点为0开始进行统计判断int l_sum = 0, r_sum = 0;//初始化左边之和和右边之和为0for (j = 0; j < numsSize; j++) {if (j < i) l_sum += nums[j]; //小于i坐标的都是左边的数字else if (j > i) r_sum += nums[j];//大于i坐标的都是右边的数字}if(l_sum == r_sum) {//如果两遍相等则i就是中心坐标return i;}} return - 1;
}