小编use*_*768的帖子

为什么递归返回第一个函数?

很抱歉提出一个非常基本的问题,关于一个已经多次讨论的论点,我只是无法弄清楚答案.我尝试在论坛上搜索已经在主题上提出的问题,但没有找到确切的答案(或者没有理解).

当以不同顺序调用时,为什么此函数会打印从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)

谢谢.

c recursion tail-recursion

4
推荐指数
1
解决办法
121
查看次数

以o(n)复杂度向左或向右旋转一组位置

我想编写一个程序,根据用户的输入(正 - >,负< - )将数组向右或向左移动一定数量的位置.该程序必须具有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)

c rotation shift

3
推荐指数
1
解决办法
2万
查看次数

标签 统计

c ×2

recursion ×1

rotation ×1

shift ×1

tail-recursion ×1