很抱歉提出一个非常基本的问题,关于一个已经多次讨论的论点,我只是无法弄清楚答案.我尝试在论坛上搜索已经在主题上提出的问题,但没有找到确切的答案(或者没有理解).
当以不同顺序调用时,为什么此函数会打印从i到10的数字的两倍?它不应该以相同的顺序打印出来吗?我一直听说这是递归的工作方式:每个函数在其代码中调用另一个相同的函数,只应用于较小的域,直到满足结束条件.此时它应该返回(回溯)到原始函数; 这是我不明白的,为什么它返回(不是作为语法调用)主函数.
void count(int i){
if(i < 10){
printf("%d\n", i);
count(i + 1);
printf("%d\n", i);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我想编写一个程序,根据用户的输入(正 - >,负< - )将数组向右或向左移动一定数量的位置.该程序必须具有O(n)复杂性.我是用这种方式写的,但它不能正常工作.在示例中,输出应为"2,3,4,5,6,1",但在我的版本中为"6,2,3,4,5,1".
#include <stdio.h>
#include <string.h>
#include <math.h>
void rotate(int *array, int N, int D);
int main(){
int i;
int array[] = {1, 2, 3, 4, 5, 6};
rotate(array, sizeof(array)/sizeof(int), 5);
for(i=0; i<sizeof(array)/sizeof(int); i++)
printf("%d\t", array[i]);
return 0;
}
void rotate(int *array, int N, int D){
int i, j, *tmp, d;
tmp = malloc(abs(D) * sizeof(int));
if(D<0){
d = abs(D);
for(i=d; i<N; i++){
tmp[i%d] = array[i];
array[i] = array[i-d];
array[i-d] = tmp[i%d];
}
}
if(D>0){
for(i=(N-D-1); i>=0; …Run Code Online (Sandbox Code Playgroud)