第一次试验

试验一:用递归函数计算1+2+....+100的值。

#include<stdio.h>
int sum(int n);
int main()
{
    int num=0;
    num=sum(100);
    printf("%d",num);
    return 0;
}
int sum(int n)
{
    if(n==1)
    return 1;
    else 
    return n+sum(n-1);
}

试验二:用递归函数将int 483 转换为字符串 483.

#include<stdio.h>
void ver(int a);
int main()
{
    ver(483);
    return 0;
 } 
 void ver(int a)
 {
     int b=0;
     char c;
     if(a!=0)
     {
         ver(a/10);
         b=a%10;
         c=b+'0';
         printf("%c",c);
     }
 }

试验三:在子函数中用指针将主函数中的两个数交换数值。

#include<stdio.h>
void f(int *a,int *b);
int main()
{
    int a,b;
    printf("请输入两个数。
");
    scanf("%d%d",&a,&b);
    f(&a,&b);
    printf("%d	%d",a,b);
    return 0;
}
void f(int *a,int *b)
{
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
}

实验四:将整数用递归转换为字符串。

#include<stdio.h>
void ver(int n,char a[]);
int main()
{
    int b=0;
    char a[100];
    scanf("%d",&b);
    ver(b,a);
    puts(a);
    return 0;
}
void ver(int n,char a[])
{
    static i=1;
    int q=n,num=0,b=0;
    while(q!=0)
    {
        q=q/10;
        num++;
    }
    if(n!=0)
    {
        b=n%10;
        a[num]=b+'0';
        i++;
        ver(n/10,a);
    }
    else 
    {
        a[i]='';
    }
}

总结:想清楚递归的思路,它是如个一次一次调用本身,并当到临界条件时,又一次次返回到第一次调用的。

  在子函数中交换主函数中的两个数值,比如向形参传递地址,而非数值,如果传递数值,那么在子函数中交换的只是形参,当函数调用结束后,形参内存释放,主函数中数值并没有改变。传递地址,通关指针间接访问主函数中的两个数值,交换主函数中的数值。

原文地址:https://www.cnblogs.com/TX980502/p/6512160.html