[英]A simple recursion function prints weird stuff
所以我需要編寫一個遞歸函數來驗證數字是否為素數。 算法很簡單,工作正常,只是當我打印函數而不是顯示1或0時,它顯示隨機廢話(可能是地址?),我找不到原因。
編碼:
int isPrimal(int n, int p) {
if (p == 1) {
return 1;
}
if (n % p == 0) {
return 0;
}
isPrimal(n, p - 1);
printf("n = %d i = %d\n", n, p);
}
int main() {
int numcase, *A, sizeA = 0, i = 0, cnt3dig = 0, n, p;
printf("Enter a number to check for primality\n");
scanf("%d", &n);
p = (n - 1);
printf("The result is 1 if the number is a prime, 0 otherwise\n");
isPrimal(n, p);
printf("The result is %d\n", isPrimal);
}
您正在打印isPrimal()
函數的地址,您應該將其更改為
printf("The result is %d\n", isPrimal(n, p));
並且不要忘記檢查scanf()
的返回值。
所述printf
在main
調用未定義的行為,因為你傳遞函數的地址isPrimal
而不是其結果是:改變printf("The result is %d\\n", isPrimal);
至
printf("The result is %d\n", isPrimal(n, p));
此外,您的算法效率非常低。 函數isPrimal
遞歸調用n-2
次。 如果刪除printf
語句,編譯器會注意到對自身的尾調用,並將此遞歸轉換為循環。 當你有printf
語句時,它不能這樣做,對於大的n
值你可能會過於沉重並導致Stackoverflow
。
There are 2 changes that are necessary
1.在main中,打印輸出時進行函數調用 - 不是對函數位置的引用。 2.在isPrimal中,在print語句之后遞歸調用isprimal。
#include<stdio.h>
#include<stdlib.h>
int isPrimal(int n, int p) {
if (p == 1) {
return 1;
}
if (n % p == 0) {
return 0;
}
printf("n = %d i = %d\n", n, p);
isPrimal(n, p - 1);
}
int main() {
int numcase, *A, sizeA = 0, i = 0, cnt3dig = 0, n, p;
printf("Enter a number to check for primality\n");
scanf("%d", &n);
p = (n - 1);
printf("The result is 1 if the number is a prime, 0 otherwise\n");
printf("The result is %d\n", isPrimal(n, p));
return 1;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.