C语言递归函数,搞不懂怎么进行运算

#这个进入递归调用后不是一直递归没有返回值啊,搞不懂怎么进行运算


#include 
invert(int *s, int i, int j)
{
int t;
if(iinvert(s,i+1,j-1);
t=*(s+i); *(s+i)=*(s+j); *(s+j)=t;
}
}
void main()
{
int a[6]={10,6,23,-90,0,3},i;
invert(a,0,5);
for(i=0; i<6; i++)
printf("%d ,",a[i]);
printf("\n");
}

#我认为的是从主函数进去后从invert(a,0,5);指针s指向a[0],i=0,j=5然后进入if判断为真
然后进入递归,但是这个递归一直到if为假没有返回值后面怎么算呢?

你这里的 递归的结束条件就是 不满足 if,然后 递归的 函数,一层层的再返回, 直到 返回到第一层 if 的逻辑走完,

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7622238
  • 你也可以参考下这篇文章:C语言编程: 5.1 从键盘输入任意一个实数,不使用计算绝对值的函数编程计算并输出该实数的绝对值。*(if解法)
  • 除此之外, 这篇博客: C语言 初学者使用 if语句 常见的错误中的 2、&符号是位运算符,表示“按位与”,是双目运算符 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

         用于二进制序列中,全1出1,有0出0。

  • 您还可以看一下 王健伟老师的C语言入门篇课程中的 if语句详解小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    递归函数是指调用自身的函数,常用于解决一些需要重复求解的问题。在递归函数中,if语句是用来做递归结束条件判断的,如果满足结束条件就不再继续递归,否则继续递归。如果进入递归后if语句为假没有返回值,需要考虑在递归退回上一层后继续进行后续计算。这个可以在参数中增加一个变量并不断更新,使用迭代不断往下执行,直到满足结束条件。下面给出一个例子:

    #include <stdio.h>
    
    // 计算n!
    double factorial(int n, double result) {
        if(n < 0) {  // 递归结束条件
            printf("Error! Negative number doesn't have factorial.\n");
        }
        else if(n == 0) {
            return result;
        }
        else {
            result = result * n;
            return factorial(n-1, result);  // 递归调用
        }
    }
    
    int main() {
        int n;
        double r = 1;
        printf("Enter a positive integer: ");
        scanf("%d", &n);
        double f = factorial(n, r);  // 调用递归函数计算n!
        printf("%d! = %lf\n", n, f);
        return 0;
    }
    

    上述代码是计算n!的函数,其中if语句用来判断n是否为负数或者为0作为递归结束条件,如果不满足,则调用自身进行递归计算。在递归过程中,传入的参数是不断更新的,这个参数result用来存储每次计算结果,并随着每次递归的调用而不断更新,直到满足结束条件返回最终结果。

    另外,下面还给出一个计算斐波那契数列的例子。斐波那契数列为f(n)=f(n-1)+f(n-2),其中f(0)=0,f(1)=1。该例子中也使用了递归函数。

    #include <stdio.h>
    
    // 计算斐波那契数列的函数
    int fib(int n){
        if(n < 0) {  // 递归结束
            printf("Error! Negative number doesn't have Fibonacci sequence.\n");
            return -1;
        }
        else if(n == 0) {
            return 0;
        }
        else if(n == 1) {
            return 1;
        }
        else {
            return fib(n-1) + fib(n-2);  // 递归计算
        }
    }
    
    int main() {
        int n;
        printf("Enter the number of the terms in Fibonacci Sequence: ");
        scanf("%d", &n);
        printf("The first %d terms of the Fibonacci Sequence are: \n", n);
        for(int i = 0; i < n; i++) {
            printf("%d ", fib(i));  // 调用递归函数计算
        }
        printf("\n");
        return 0;
    }
    

    上述代码中,斐波那契数列的计算也使用了递归函数,if语句用来判断递归结束条件,n<0时报错,其中的else后面还有两个else if语句用来判断边界条件。在计算斐波那契数列时,用for循环进行遍历,每次调用函数计算。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^