[英]how do i solve this stack overflow error?
我正在寫一個 function 來檢查給定的數組是一個palendrome還是不使用遞歸。
int pal(char p[], int i, int j) {
if (i > j) return 1;
if (p[i] != p[j]) {
return 0;
}
pal(p, i++, j--);
}
void palTest() {
char p1[] = "hello";
char p2[] = "elle";
int x;
x = pal(p1, 0, 4);
if (x == 0)
printf("p1 is not a palendrom\n");
else
printf("p1 is a palendrom\n");
x = pal(p2, 0, 3);
if (x == 0)
printf("p2 is not a palendrom\n");
else
printf("p2 is a palendrom\n");
}
void main() {
palTest();
}
我預計編寫 p2 的程序是回文,但它沒有打印任何內容。
function pal
int pal(char p[],int i, int j)
{
if (i > j)
return 1;
if (p[i] != p[j])
{
return 0;
}
pal(p, i++, j--);
}
具有未定義的行為,因為它在不是 i > j 且不是 p[i].+ p[j] 的情況下不返回任何內容。
你必須寫
int pal(char p[],int i, int j)
{
if (i > j)
return 1;
if (p[i] != p[j])
{
return 0;
}
return pal(p, ++i, --j);
}
另請注意,您必須使用預遞增和預遞減運算符。
return pal(p, ++i, --j);
否則,您會將i
和j
的相同值傳遞給 function pal
的下一次調用。
function 的第一個參數也應該有限定符const
。
function 的定義更簡單,只需使用兩個參數。
這是您的程序,其中包含更新的 function 定義及其調用。
#include <stdio.h>
#include <string.h>
int pal( const char *s, size_t n )
{
return n < 2 ? 1 : s[0] == s[n-1] && pal( s + 1, n - 2 );
}
void palTest( void )
{
char p1[] = "hello";
char p2[] = "elle";
int x;
x = pal( p1, strlen( p1 ));
if (x == 0)
printf("p1 is not a palendrom\n");
else
printf("p1 is a palendrom\n");
x = pal( p2, strlen( p2 ) );
if (x == 0)
printf("p2 is not a palendrom\n");
else
printf("p2 is a palendrom\n");
}
int main(void)
{
palTest();
return 0;
}
代替 function 的返回語句中的條件運算符,您可以使用如下邏輯表達式
int pal( const char *s, size_t n )
{
return ( n < 2 ) || ( s[0] == s[n-1] && pal( s + 1, n - 2 ) );
}
請記住,根據 C 標准,不帶參數的 function 主要應聲明為
int main( void ).
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.