#这个进入递归调用后不是一直递归没有返回值啊,搞不懂怎么进行运算
#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 的逻辑走完,
不知道你这个问题是否已经解决, 如果还没有解决的话:用于二进制序列中,全1出1,有0出0。
递归函数是指调用自身的函数,常用于解决一些需要重复求解的问题。在递归函数中,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循环进行遍历,每次调用函数计算。