文章目录

http://www.51testing.com/?uid-225738-action-viewspace-itemid-221151

《C语言实现strlen函数的几种方法》

http://blog.csdn.net/sailor_8318/article/details/3071048

递归的思想:

“不使用中间变量”只是说程序员不能显式的申请内存而已,即不能有局部变量或者动态内存申请。

如果函数自动申请栈内存或者使用寄存器存储变量,或者使用立即数寻址即常量,那么就相当于“不使用中间变量”。

从函数原型看,返回值为int,那么在函数内部必定需要一个地方存储这个值,要么是常数要么是寄存器。

长度不为1时不能一次就求出来,说明必须有递归调用,这样递归时函数会自动申请栈内存,这样就相当于程序员“不使用中间变量”了。

中间返回的值通过寄存器自动保存,最后一次返回时拷贝到int中去。

这种问题都是利用常量,或者将变量的申请交给编译器在递归过程中自动在栈中申请。

1
int NoMallocStrlen(const char *str)  
{  
        if (str==NULL)  
        {  
                return 0;  
        }  
   
        if (*str != '/0')  
        {  
                return 1+NoMallocStrlen(++str);  
        }  
        else  
                return 0;  
}  
   
int main()  
{   
        const char *p  = "hello!";  
        int a = NoMallocStrlen(p);  
   
        if(a == strlen(p))  
        {  
                printf("NoMallocStrlen is well done!/n");  
        }  
        else  
        {  
                printf("Error!/n");  
        }  
}
文章目录